Anmelden

View Full Version : RUNSQL im CL-Programm



samik
29-01-02, 15:34
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.]

rmittag
29-01-02, 16:02
<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.]

Schnichels
30-01-02, 09:07
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

samik
30-01-02, 12:36
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]

skipper_k
31-01-02, 09:12
<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]

skipper_k
31-01-02, 09:15
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)

samik
31-01-02, 09:34
Hi Skipper,
OVRDBF ist da zum Überschreiben der Datei, aber ich wollte INSERT ausführen.
Samik

mk
31-01-02, 10:21
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

Andreas Huyer
31-01-02, 10:28
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.)

Günther
31-01-02, 14:26
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