PDA

View Full Version : RUNSQLSTM falsch aber Interaktiv OK



Seiten : [1] 2

BerndF
17-03-03, 10:34
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

B.Hauser
17-03-03, 10:43
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

BerndF
17-03-03, 12:16
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

rmittag
17-03-03, 12:25
<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 &#0124;&#0124; 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

BerndF
17-03-03, 12:36
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

rmittag
17-03-03, 15:14
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 &#0124;&#0124; 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 &#0124;&#0124; 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

BerndF
17-03-03, 16:05
Hallo Rolf,

vielen Dank für die Infos. Hmm .. es geht. Toll :-))

Gruß Bernd

Fuerchau
18-03-03, 14:06
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:

&gt;&gt;Benutze stattdessen die SQL Scalar Function CONCAT(), dann klappt's.&lt;&lt;

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

B.Hauser
09-04-03, 20:04
Hallo Karin,

ersetze in Deinem SQL-Statement einfach !! durch Concat:

set sdtxt2 = substring(sdtxt2, 1, 12) concat
'000000000000' concat
substring(sdtxt2, 25, 16)

Birgitta