PDA

View Full Version : CLP: SQL-Statement ausführen



prsbrc
30-07-07, 12:49
Schönen Nachmittag!

Ich habe ein Problem, wo ich nicht weiterkomme und eventuell könnt ihr mich in die richtige Richtung "lotsen".

Wir haben einen individuellen CMD "RUNSQL" um SQL-Statements auszuführen. Ich glaub dieser Command macht nix anderes als der RUNSQLSTM-Command - is ja egal. ;)


0013.31 RUNSQL REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +
0013.32 FROM PFPF/PETER2 WHERE MLMTXT LIKE +
0013.33 ''%' *CAT &ORNO *CAT ''%' AND +
0013.34 MLCDAT = '' *CAT &ORDA *CAT '') +
0013.35 OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +
0013.36 MEMBER(*REPLACE/*FIRST)

Bei diesem Statement komme ich nicht weiter, da ich Variablen benütze und damit die beiden Char-Felder überprüfen möchte (siehe LIKE etc).
Doch der SEU mäckert die ganze Zeit wegen den " ' " die ihm nicht passen - ich brauch diese aber für die CHAR-Felder.
Das Statement sollte mir die Datensätze in eine Tabelle schreiben, wo die Auftragsnummer im Text vorkommt und das Erstellungsdatum passt.

Wie kann ich dieses realisieren?

Danke im Voraus!

B.Hauser
30-07-07, 12:59
Hallo,

einzelne Hochkommate innerhalb eines Strings müssen immer verdoppelt werden:


0013.31 RUNSQL REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +
0013.32 FROM PFPF/PETER2 WHERE MLMTXT LIKE +
0013.33 '''%' *CAT &ORNO *CAT '''%' AND +
0013.34 MLCDAT = ''' *CAT &ORDA *CAT ''') +
0013.35 OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +
0013.36 MEMBER(*REPLACE/*FIRST)


Birgitta

Fuerchau
30-07-07, 13:43
Wenn &ORNO Leerzeichen am Ende enthält würde ich TCAT verwenden !

prsbrc
30-07-07, 14:11
Hi!

Nö, die Variable &ORNO enthällt keine Leerzeichen. Sonst ist es würdig und recht wenns abstürzen würde :D Leerzeichen darf es nicht geben ...

Es schaut jetzt so aus - mäckert allerdings immer noch:


0013.31 RUNSQL REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +
0013.32 FROM PFPF/PETER2 WHERE MLMTXT LIKE +
0013.33 '''%' *CAT &ORNO *CAT '''%' AND +
0013.34 MLCDAT = ''' *CAT &ORDA *CAT ''') +
0013.35 OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +
0013.36 MEMBER(*REPLACE/*FIRST)

Folgende 3 Meldungen bringt der SEU:


Zeichen '%' nach Zeichenfolge ''SELECT ML' ist ungültig.
Kein dazugehöriges Hochkomma gefunden.
Keine dazugehörige runde Klammer gefunden.


Ich kann mir da keinen Reim mehr darauf machen. :(

Muss aber dazusagen das ich auch kein CLP(rofi) bin ;)

kuempi von stein
30-07-07, 14:25
mhh... diese Hochkommageschichte ist immer nervig.

Mach doch mal noch eine zusätzliche Variabel (ähnlich wie &ORDA) in der nur % drinsteht. Also eine 1 CHAR. Die nennste &PROZ oder so . Und die verketteste dann anstelle dessen. Dann sparste diese Hochkommasache.

kuempi

prsbrc
30-07-07, 14:43
YESS! Haut hin :D


0013.12 CHGVAR VAR(&XSQL) VALUE('SELECT MLMTXT, MLCDAT, +
0013.13 MLNAME FROM PFPF/PETER2 WHERE MLMTXT LIKE +
0013.14 ''' *CAT &PRZZ *CAT &ORNO *CAT &PRZZ *CAT +
0013.15 ''' AND MLCDAT = ''' *CAT &ORDA *CAT '''')
0013.21
0013.31 RUNSQL REQUEST(&XSQL) OUTPUT(*OUTFILE) +
0013.35 OUTFILE(QTEMP/HOGTMP) MEMBER(*REPLACE/*FIRST)

Danke!

Fuerchau
30-07-07, 17:54
Man muss die HK's nur korrekt zählen


0013.31 RUNSQL REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +
0013.32 FROM PFPF/PETER2 WHERE MLMTXT LIKE +
0013.33 ''%' *CAT &ORNO *CAT '%'' AND +
0013.34 MLCDAT = ''' *CAT &ORDA *CAT '''') +
0013.35 OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +
0013.36 MEMBER(*REPLACE/*FIRST)

harkne
17-08-07, 12:29
Noch ein kleiner Tipp wenns mal wieder unüberschaubar wird ;-)

Immer wenn ich in einem String ein Hochkomma benötige mache ich " (doppelte Anführungszeichen) und ersetze diese dann am Schluss wenn ich fertig bin mit '' (zwei aufeinanderfolgende Hochkommas).
Ist beim Eintippen übersichtlicher.