Anmelden

View Full Version : SQLRPG Angabe LIB als Paramater



procher
24-01-03, 10:23
wie kann ich in einem SQLRPG die Angabe der Bibliothek parametrisieren?
Bei Feldern geht das mit vorangestelltem :. Bei der Lib geht das nicht. Läßt man die LIB-Angabe weg, wird die LIB eingesetzt, die über die Bibliotheksliste die Datei enthält.

C/EXEC SQL
C+ UPDATE LIBNAME/PFNAME ...
C/END-EXEC

Fuerchau
24-01-03, 11:05
SQL erlaubt leider keine Parametrierung eines Lib-/Filenamen !
Aber: OVRDBF funktioniert auch bei SQL !
Also vor der Ausführung des SQL's den dazu passenden OVRDBF FILE(MYFILE) TOFILE(MYLIB/MYFILE) absetzen.

rmittag
24-01-03, 11:37
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
SQL erlaubt leider keine Parametrierung eines Lib-/Filenamen
[/quote]

http://www.as400-forum.de/ubb/confused.gif bei mir schon http://www.as400-forum.de/ubb/wink.gif :



d SqlStm s 512a
d Lib s 10a inz('QTEMP')
d File s 10a inz('TEST')

c/Exec SQL
c+ declare PrepSqlStm Statement
c/End-Exec

c eval SqlStm = 'UPDATE '
c + %trim(Lib)
c + '/'
c + %trim(File)
c + ' SET X1 = X2'

c/Exec SQL
c+ prepare PrepSqlStm from :SqlStm
c/End-Exec

c/Exec SQL
c+ execute PrepSqlStm
c/End-Exec


Gruß http://www.as400-forum.de/ubb/eek.gif
Rolf

Fuerchau
24-01-03, 16:59
Man sollte doch sehr genau darauf achten, was man hier schreibt.

Natürlich kann man SQL auch dynamisch zusammenbauen und per Prepare/Execute zur Ausführung bringen.
Solange man das Statment auch nur 1 Mal benötigt und kein "Select" ist, mag dies ein guter Weg sein.
Um aber performant zu sein, die Statments (man kann ja durchaus mehrere in einem Programm haben) ggf. mehrfach mit unterschiedlichen Feldinhalten verwenden möchte, wird es schon ungleich schwieriger.

Jedesmal den String zusammenschustern, bei Feldwerten auf numerisch und Zeichen achten usw., usw.
Um dies korrekt durchzuführen sollte man mit SQLDA's arbeiten, sonst macht man sich doch ziehmlich viel Arbeit.
Was machst du, wenn ein Hochkomma in einem Zeichenfeld vorkommt ?
Du brauchst dann eine Schleife und das Zeichen zu verdoppeln, da der Prepare sonst fehlschlägt (Syntaxfehler).
Numerische Werte müssen editiert werden. Ja sicher geht das mit %EDIT, aber beim Dezimalkomma hörts schon auf. Der wird nämlich zur Compile-Zeit festgelegt.
Schieb dann das Programm mal auf eine Maschine, die mit Dezimalpunkt arbeitet und schon wundert man sich, dass das Programm nicht läuft.

Und was machst du z.B. beim SELECT ?
Der Fetch funktioniert dann nur mit "FETCH ... USING DESCRIPTOR ...".

Solange die Felder schon zur Compile-Zeit bekannt sind, nur die Lib noch variabel ist, sollte man mit fertigen SQL-Befehlen arbeiten und ggf. mit OVRDBF die Lib wechseln, auch das Arbeiten mit Teildateien ist dann möglich, versuch das mal mit nur Prepare ohne für jede Teildatei einen Alias zu erstellen.