[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2002
    Beiträge
    48

    Cool RUNSQL im CL-Programm

    In der INSERT-Anweisung möchte ich eine Variable verwenden, aber ich weiß nicht die richtige Syntax. Das falsche Programm sieht wie folgt aus:
    PGM
    DCL VAR(&CFIL) TYPE(*CHAR) LEN(4) VALUE ('0121')

    RUNSQL REQUEST('INSERT INTO ALIB/BDATEI(FIL) VALUES(&CFIL)')

    ENDPGM

    Danke im voraus!
    Samira



    [Dieser Beitrag wurde von samik am 29. Januar 2002 editiert.]

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    340

    Post

    <BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>RUNSQL REQUEST('INSERT INTO ALIB/BDATEI(FIL) VALUES(&CFIL)')[/quote]

    den Befehl RUNSQL gibt es im OS/400 bis einschließlich R5.1 nicht.

    3 Sachen fallen mir auf

    • SQL kennt kein member Konzept : ALIB/BDATEI(FIL) ist für SQL nicht gültig
    • die CL Variable steht innerhalb eine string Konstante, d.h. der Name wird weitergegeben, aber nicht der Inhalt
    • die CL Variable &CFIL ist als character deklariert. wenn das in der Tabelle auch so ist, dann muß der Inhalt in Anführungszeichen übergeben werden


    [Dieser Beitrag wurde von rmittag am 29. Januar 2002 editiert.]

  3. #3
    Registriert seit
    Nov 2001
    Beiträge
    96

    Post

    Hallo,

    der CL-Befehl der SQL-Befehle in einem CLP ausführt heisst RUNSQLSTM. Mit der Suchfunktion hier im Forum mal nach 'RUNSQLSTM' suchen und den Beitrag 'SQL in CL einbinden lesen'.

    Für die Variablen-Übergabe mal nach 'CRTQMQRY' suchen und den Beitrag 'QRY und PARAMeter' lesen.

    Ist zwar etwas kompliziert aber es funktioniert.

    mfG

    Jürgen Schnichels

  4. #4
    Registriert seit
    Jan 2002
    Beiträge
    48

    Post

    Jan, danke für deine Antwort.

    Der aktuelle OS/400 Stand ist V4R4.
    RUNSQL funktioniert ohne Fehler, wenn ich statt &CFIL einen Wert in Anführungszeichen setze, also eine Zeichenkette.
    Samik

    <BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von rmittag:
    den Befehl RUNSQL gibt es im OS/400 bis einschließlich R5.1 nicht.

    3 Sachen fallen mir auf

    • SQL kennt kein member Konzept : ALIB/BDATEI(FIL) ist für SQL nicht gültig
    • die CL Variable steht innerhalb eine string Konstante, d.h. der Name wird weitergegeben, aber nicht der Inhalt
    • die CL Variable &CFIL ist als character deklariert. wenn das in der Tabelle auch so ist, dann muß der Inhalt in Anführungszeichen übergeben werden


    [Dieser Beitrag wurde von rmittag am 29. Januar 2002 editiert.]
    [/quote]


  5. #5
    Registriert seit
    Jan 2002
    Beiträge
    53

    Post

    <BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von samik:
    In der INSERT-Anweisung möchte ich eine Variable verwenden, aber ich weiß nicht die richtige Syntax. Das falsche Programm sieht wie folgt aus:
    PGM
    DCL VAR(&CFIL) TYPE(*CHAR) LEN(4) VALUE ('0121')

    RUNSQL REQUEST('INSERT INTO ALIB/BDATEI(FIL) VALUES(&CFIL)')

    ENDPGM

    Danke im voraus!
    Samira



    [Dieser Beitrag wurde von samik am 29. Januar 2002 editiert.]
    [/quote]


  6. #6
    Registriert seit
    Jan 2002
    Beiträge
    53

    Post

    In einer der vorigen Antworten hierzu wurde ausgesagt, daß SQL das Memberkonzept nicht kennt. Dieses Problem läßt sich lösen, indem das SQL-Statement ohne Memberangabe definiert wird und vor dem SQL ein OVRDBF ausgeführt wird. (Ggfs danach DLTOVR anwenden)

  7. #7
    Registriert seit
    Jan 2002
    Beiträge
    48

    Smile

    Hi Skipper,
    OVRDBF ist da zum Überschreiben der Datei, aber ich wollte INSERT ausführen.
    Samik

  8. #8
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hallo Samik,

    wie schon in den Beiträgen angegeben gibt es
    den Befehl RUNSQL nicht im OS400.
    Deshalb liegt die Vermutung nahe, dass es sich bei dem RUNSQL bei Dir um ein
    kleines Tool handelt.
    Um zu prüfen wie das Tool funktioniert solltest Du einmal den Debugger (STRDBG..) starten und prüfen welche Meldungen erscheinen. Das Geheimnis vieler dieser Tools
    ist der QueryManager.
    Vielleicht hilfts ja
    Gruss Michael


  9. #9
    Registriert seit
    Jan 2002
    Beiträge
    32

    Wink

    Mit "überschreiben" sind hier nicht die Daten in der Datei gemeint, sondern SQL wird lediglich klar gemacht, welche Teildatei auszuwählen ist (Standartmäßig wäre es *FIRST). OVRDBF "routet" sozusagen eine bestimmte Teildatei innerhalb eines Jobs auf den Namen der Datenbankdatei. Insofern hat skipper vollkommen recht. Manche sprechen "OVR" deshalb auch als "Override" aus, das klingt dann ein wenig verständlicher (Was nun die richtige Ausprache ist, weiß wohl nur Dr. Frank S.)

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    62

    Post

    Hallo Samira,

    das Problem liegt am Parameter REQUEST, der ja einen String erwartet, d.h. für Request müsste eine Variable definiert werden, die mit einer Konstante + weiteren Variablen gefüllt wird;
    der Aufruf wäre dann RUNSQL REQUEST(&STRING);

    das gleiche Problem hat man z.B. bei OPNQRYF, wenn der Select-Parameter dynamisch sein soll

    MfG Günther

Similar Threads

  1. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  2. Rufendes Programm in CL "retrieven"
    By Lichtblitz in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 22-06-06, 09:50
  3. RUNSQL im CL mit Parametern
    By petra1 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 13-07-05, 14:36
  4. QMQRY in CL Programm
    By Hubert in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 11-05-05, 13:25
  5. CMD Parameter im CL Programm
    By mk in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 25-09-04, 15:48

Berechtigungen

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