View Full Version : RUNSQLSTM falsch aber Interaktiv OK
Hallo,
ich habe über strsql folgende Anweisung eingegeben, die tadellos funktioniert:
insert into Testbib/lagpf001
Select FIYE73, year(date(bsdt73+693594)), month(date(bsdt73+693594)), bety73, itnr73 from xivpf073
where (digits(fiye73) !! digits(bsdt73) !! bety73)=(select max((digits(fiye73) !! digits(bsdt73) !! bety73)) from xivpf073)
packe ich das ganze in ein Source-Member und lasse es mit RUNSQLSTM laufen gibts Probleme. Angemeckert werden die beiden Ausrufenzeichen, die ich zum Verbinden zweier oder mehrerer Felder verwende.
Hat jemand eine Idee warum das im Interaktiven funktioniert und mit runsqlstm nicht? Wie müßte der Befehl denn dann aussehen?
Gruß
Bernd
Hallo Bernd,
mit !! oder || gibt es Probleme, wenn diese im RUNSQLSTM oder Embedded SQL verwendet werden.
Benutze stattdessen die SQL Scalar Function CONCAT(), dann klappt's.
Birgitta
Hallo Brigitta,
vielen Dank für den Tip. Hat super funktioniert. Ist halt nur etwas mehr Tipparbeit und nicht so übersichtlich. Vielleicht bessert die IBM an dieser Stelle noch nach :-))
Gruß Bernd
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Vielleicht bessert die IBM an dieser Stelle noch nach :-))
[/quote]
das ist wahrscheinlich nicht nötig. Ich benutze immer || auch in sourcen für RunSqlStm. Wichtig ist, dass die SrcPF eine passende CCSID ( DSPFD ) hat, bzw. dass eine Übersetzung ( DSPJOB ) möglich ist.
Gruß
Rolf
Hallo Rolf,
die CCSID ist bei uns 273, welche muß ich denn verwenden und wie stelle ich das ein? damit es läuft? So ganz komme ich mit deinem Hinweis nicht klar.
Gruß Bernd
Mit den Einstellungen :
SysVal
QCCSID : 273
Job
CCSID : 273
Tabelle
CCSID : 273
läuft das folgende source member mit runSqlStm
create table qtemp/zumTest
( line char (120)
);
insert into qtemp/zumTest
select CH_ConfigId || CH_ConfigText
from CH_Configuration;
und dieses kleine Progrämmchen ebenfalls
h DftActGrp(*no)
dline s 60a
c/Exec Sql
c+ declare c1 cursor for
c+ select CH_ConfigId || CH_ConfigText
c+ from CH_Configuration
c/End-Exec
c/Exec Sql
c+ open c1
c/End-Exec
c/Exec Sql
c+ fetch c1 into :line
c/End-Exec
c/Exec Sql
c+ close c1
c/End-Exec
c eval *inLr = *on
diese Einstellungen spielen zusammen und müssen passen. Wenn die Eingaben von einem PC aus erfolgen, muß auch die Code page passen, d.h. entweder gleich oder "übersetzbar" sein.
Gruß
Rolf
Hallo Rolf,
vielen Dank für die Infos. Hmm .. es geht. Toll :-))
Gruß Bernd
Mit dem RPG-Programm sollte man etwas vorsichtiger sein, da das Zeichen "|" ein sog. variantes Zeichen ist und somit der Hex-Code bereits zur Umwandlungszeit feststeht.
Läuft das Programm später unter einer anderen CCSID als die ursprüngliche CCSID der Quelle, funktioniert das nicht mehr, da ja das |-Zeichen nicht mehr übersetzt wird !
Datenumsetzungen erfolgen ausschließlich bei Datenzugriffen und nicht bei Programmkonstanten !!!
karin-vogelmann
09-04-03, 15:49
hallo birgitta,
ich darf mal zitieren:
>>Benutze stattdessen die SQL Scalar Function CONCAT(), dann klappt's.<<
wie müßte mein !!-statement denn mit concat() aussehen?:
blabla
set sdtxt2 = substring(sdtxt2, 1, 12) !!
'000000000000' !!
substring(sdtxt2, 25, 16)
blablaweiter
etwa so?:
set sdtxt2 = concat(substring(sdtxt2, 1, 12),
'000000000000' , !!
substring(sdtxt2, 25, 16) )
ich müßte in die mitte dieses feldes ein paar Nullen einbauen.
vielen dank im voraus!
gruß, karin
Hallo Karin,
ersetze in Deinem SQL-Statement einfach !! durch Concat:
set sdtxt2 = substring(sdtxt2, 1, 12) concat
'000000000000' concat
substring(sdtxt2, 25, 16)
Birgitta