Anmelden

View Full Version : IFS-Verzeichnischeck mit SQL



lucullus
07-04-22, 08:50
Guten Morgen,

ich möchte die Existenz eines Verzeichnis mittels emb. SQL prüfen.

SELECT CASE WHEN count(*) > 0 THEN '1' ELSE '0' END into :gefunden
FROM TABLE(QSYS2.IFS_OBJECT_STATISTICS(TRIM(:Pfad), 'YES', '*ALLDIR'));


Initialisiere ich die Variable Pfad varchar(100) inz('home/Myfolder/Sub/' wird das SQL korrekt ausgeführt.
Wird die Variable Pfad varchar(100) aber durch Programmparameter gefüllt erhalte ich immer einen SQL Fehler:
SQLCODE 462
SQLSTATE 01532
der Job läuft unter CCSID 1141.

Hat einer eine Idee wo ich ansetzen kann?

Danke für die Hinweise.

Fuerchau
07-04-22, 09:04
Wie meist: näheres sagt dir das Joblog.
Laut Doku ist SQLSTATE 01xxx nur eine Warnung, der SQL liefert aber meist trotzdem ein Ergebnis.
Per SQL Get Diagnostics bekommst du den Klartext zum Code.

lucullus
07-04-22, 09:09
Messagetext lt. SQLDiagnostics:

Prozedur oder benutzerdefinierte Funktion IFS_OBJECT_STATISTICS in QSYS2 hat einen SQLSTATE der Art Warnung zurückgegeben.

B.Hauser
07-04-22, 10:30
Wenn Du Variablen verwendest, musst Du diese auch im richtigen Format (Datentyp) definieren.
Der Parameter Start_Path_Name, also der erste Parameter in der UDTF IFS_OBJECT_STATISTICS ist als DBCLOB (DOUBLE BYTE Large Object) definiert. Du übergibst jedoch einen Parameter, der als VARCHAR (SINGLE BYTE Character Set) definiert ist ... und das passt nicht.
Deshalb erhälst Du die Warnung!
... und eine Warnung ist KEIN FEHLER, das SQL Statement wird trotzdem korrekt ausgeführt.
Deshalb sollte man auch nie den SQLCODE auf 0 bzw. den SQLSTATE auf '00000' abfragen, sondern immer explizit auf Fehler (SQLCODE < 0 / Position 1-2 in SQLSTATE weder '00' noch '01' noch '02') abfragen.