[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Hybrid View

  1. #1
    Nennewitz Besucher/Guest
    Zitat Zitat von JonnyRico
    CREATE PROCEDURE QTEMP.QCMDEXC
    (IN PARM1 CHAR (512), IN PARM2 DEC(15, 5))
    LANGUAGE CL NOT DETERMINISTIC NO SQL EXTERNAL
    NAME QSYS.QCMDEXC PARAMETER STYLE GENERAL
    Hallo Sascha.

    Ich habe das mit dem CREATE PROCEDURE ausprobiert. Das wurde anstandslos verarbeitet. Hurra!

    Dann habe ich wieder probiert:

    CALL QCMDEXC('DSPFD GES/S8 OUTFILE(GES/KANNWEG)' 0000000033.00000)

    Aber leider ist die AS/400 immernoch der Meinung: "Token 000000033.00000 ungültig. Gültige Token: ),.(#-104)".

    Kannst Du mir nochmal weiterhelfen?

    Grüße,
    Christian

  2. #2
    Registriert seit
    Apr 2002
    Beiträge
    792
    Der Command ist auch falsch und das Komma fehlt!
    CALL QCMDEXC('DSPFD FILE(GES/S8) TYPE(*MBR) OUTPUT(*OUTFILE) FILEATR(*ALL) OUTFILE(GES/KANNWEG)', LÄNGE)

  3. #3
    Nennewitz Besucher/Guest
    Hallo Sascha.

    Juhuu!

    Es hat funktioniert. Vielen herzlichen Dank für Deine Hilfe. Dank auch an Baldur.

    Damit sich auch andere daran erfreuen können habe ich die Lösung hier nochmal zusammengefaßt:

    Teildateien per SQL auflisten
    =============================

    Aufgabenstellung: Es soll aus der Tabelle S8 in der Bibliothek GES die Teildateien ermittelt werden. Natürlich geht das auch mit anderen Bilbiotheks bzw. Tabellennamen.

    1.) Stored Procedure "QCMDEXC" erstellen.
    -----------------------------------------
    CREATE PROCEDURE QTEMP.QCMDEXC (IN PARM1 CHAR (512), IN PARM2 DEC(15, 5)) LANGUAGE CL NOT DETERMINISTIC NO SQL EXTERNAL NAME QSYS.QCMDEXC PARAMETER STYLE GENERAL

    2.) Stored Procedure "QCMDEXC" aufrufen um damit eine temporäre Tabelle zu erstellen, die die Namen der Teildateien enthält. Der Parameter "OUTFILE(GES/KANNWEG)" bedeutet, daß die temporäre Tabelle "KANNWEG" heißt und in der Bibliothek "GES" erstellt wird. Die Zahl 81 ist die Anzahl Zeichen die zwischen den beiden Hochkommas stehen. Muß man abzählen.
    -----------------------------------------
    CALL QTEMP.QCMDEXC('DSPFD FILE(GES/S8) TYPE(*MBR) OUTPUT(*OUTFILE) FILEATR(*ALL) OUTFILE(GES/KANNWEG)', 81)

    3.) Der Inhalt der temporären Datei kann jetzt ganz normal per SELECT selektiert werden. Die Namen der Teildateien befinden sich im Feld "MBNAME".
    -----------------------------------------
    SELECT * FROM GES.KANNWEG

    4.) Nachdem man alles gesehen hat, kann man die temporäre Tabelle wieder entfernen.
    -----------------------------------------
    DROP TABLE GES.KANNWEG

    5.) Und die Stored Procedure, die in Punkt 1 erstellt wurde, ebenfalls.
    -----------------------------------------
    DROP PROCEDURE QTEMP.QCMDEXC

    << ENDE DES TEXTES >>

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    727
    Zitat Zitat von JonnyRico
    Der Command ist auch falsch und das Komma fehlt!
    CALL QCMDEXC('DSPFD FILE(GES/S8) TYPE(*MBR) OUTPUT(*OUTFILE) FILEATR(*ALL) OUTFILE(GES/KANNWEG)', LÄNGE)
    Korrekt JonnyRico!
    Noch ein Hinweis:
    Das *PGM-Objekt QCMDEXC muss nicht mit store procedure registriert werden, sondern funktioniert auch so, wenn sie mit QSYS.QCMDEXC qualifizert angegeben wird. Das funktioniert bei der DB2/400 im Prinzip mit allen *PGM-Objekten, sofern keine Parameter/Result Sets zurückgegeben werden müssen.
    Und wenn du die im Parameter OUTFILE angegebene Tabelle in der QTEMP erstellst kannst du dir auch das drop table sparen, sofern du das connect-Objekt am Ende ordentlich schliesst.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Na geht doch

    Die Prozedur ist tatsächlich nicht nötig, erleichtert aber einfach den Aufruf.
    Ich kann dann den Call auch per Command mit Parametern ausführen (Beispiel ADO):
    myCmd.CommandText="call qtem.qcmdexc (?, ?)"
    mycmd(0)="das Kommando"
    myCmd(1)=len(mycmd(0))

    Ohne Prozedur (siehe ClientFehlermeldung):
    "call lib.prog (parm1, parm2, ....)

    Dabei werden die Parameter automatisch in eine korrekte Form übersetzt:
    Zeichenketten immer in der angegebenen Länge
    Zahlen immer gepackt in der angegebenen Länge !
    - also um dec(15,5) zu erhalten eben 0000000000.00000

    In meinem obigen Beispiel habe ich halt mal das Komma vergessen, sorry
    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

Similar Threads

  1. per SQL Feld ändern...
    By svente in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 23-01-07, 09:49
  2. Teildateien mit sql auslesen
    By chrisssiie in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 09-01-07, 10:53
  3. update per sql
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-09-06, 08:22
  4. Kopieren per SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 18-07-06, 09:36
  5. Sortierung per SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-05-06, 12:40

Berechtigungen

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