[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2005
    Beiträge
    59

    IFS-Verzeichnischeck mit SQL

    Guten Morgen,

    ich möchte die Existenz eines Verzeichnis mittels emb. SQL prüfen.
    PHP-Code:
    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.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2005
    Beiträge
    59
    Messagetext lt. SQLDiagnostics:

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

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •