PDA

View Full Version : RTVDIR UDF für ISF Dateien



camouflage
20-11-20, 15:21
Menno, der 13. war doch vor einer Woche.

Ich steig da nicht durch. Wenn ich folgende SQL-Abfrage im ACS oder auch mit STRSQL mache, erhalte ich das gewünschte Resultat.

select file from table(mylib.rtvdir('/mydir/myfiles '))
where upper(file) like upper(trim('Muster.pdf '))

Im RPG Programm definiert als:

select file into :XFile from table(rtvdir(trim(:myPath)))
where upper(file) like upper(trim(:myFile));

knallt's mit SQL-Code 100.

Vielleicht hat jemand wieder mal einen Tipp für mich. Danke.

p.s.
es sollte natürlich IFS Dateien heissen und über die Trims müssen wir nicht diskutieren, es braucht sie nicht überall.

B.Hauser
20-11-20, 17:57
1. Du hast einen LIKE ohne Platzhalter % ist das so gewollt?

Birgitta

camouflage
20-11-20, 18:08
Birgitta,
ja das ist so gewollt. Ich hab vorgängig durchaus recherchiert und da wurde der Like empfohlen. Ausserdem möchte ich explizit auf den Filenamen testen.

Andreas_Prouza
20-11-20, 20:27
Hallo Karl,

Beim RPG Part hast du die Funktion unqualifiziert angegeben. Ich weiß jetzt nicht, ob da auch die richtige aufgerufen wird.

Im Beispiel: select file from table(mylib.rtvdir('/mydir/myfiles '))
Hast du ein Blank am Ende.
Es gibt tatsächlich Blanks im IFS am Anfang und/oder Ende.
Hat mir auch schon mal Stunden gekostet, da es nicht so schnell ersichtlich ist wenn da ein Blank am Ende steht.
Sonst lass mal das WHERE weg und mach zum Test ein FETCH FIRST ROW ONLY.

lg Andreas

camouflage
21-11-20, 08:39
Manchmal muss man sich Niederlagen auch eingestehen können, ähnlich wie den Stromstecker nicht eingesteckt.

Danke an euch, die ihr die Zeit genommen habt.

Die Lösung:
select file into :XFile from table(rtvdir(:mypath))
where file = :myfile;

if sqlcode = 0;
...

Nun die Erklärung:
Das File war so im IFS einfach nicht vorhanden. :-(
(Hab wohl zuviele Saves davon gemacht)

@Andreas:
Es ist nicht nötig den "rtvdir" qualifiziert anzugeben. Ggf. könnte man vorgängig ein RTVOBJD API aufrufen um die Lib zu ermitteln, wenn man denn schon qualifiziert mag.

Uebrigens, für diejenigen die den rtvdir nicht kennen, einfach mal danach googeln (ITJungle).
Dann kann man sich die CHKOUT/IN's oder was auch immer schenken.

Fuerchau
21-11-20, 08:50
Nun ja, CHKOUT/CHKIN dienen ja eher zum Sperren von Objekten. Außerdem sind diese direkt in CLP verfügbar und ich brauche kein RPGle schreiben;-).

camouflage
21-11-20, 09:07
Die CHKOUT's meinte ich mehr im Zusammenhang auf IFS-Dateien zu prüfen. Etwas barbarisch, aber funktioniert (meistens).

Andreas_Prouza
21-11-20, 12:23
Wegen den qualifizierten Aufruf meinte ich nur, falls du in deiner LIBL noch eine andere Version gehabt hättest und du unabsichtlich eben eine andere aufgerufen hättest als jene die du qualifiziert im STRSQL aufgerufen hättest.

camouflage
02-12-20, 14:54
... übrigens, ich hab die UDF und chkout's in die Tonne geklopft und prüfe nun alles über die IFS_OBJECT_STATISTICS table function mit SQL