PDA

View Full Version : SQL - Profis ?



PeterKarsten
12-12-03, 00:15
Ich will eine Datei in einem SQL-ILE-RPG nach verschiedenen
Kriterien auswerten. z.B.:

SELECT (Feld 1), (Feld 2) FROM SOMEWHERE
WHERE (Feld 3) = (Wert 3)
GROUP BY (Feld 1), (Feld 2)
ORDER BY (Feld 1), FELD 2)

wobei die Felder erst bei Ausführungszeit bekannt sind.

Wr weiss Rat ?

Merci
Peter

rmittag
12-12-03, 07:33
Kurzform :

SQL: declare xyz cursor for xyz_Statement

RPG: eval myvar = 'select ...'

SQL: prepare xyz_statement from :myvar

SQL: open xyz

SQL: fetch from xyz ...

zu empfehlen ist auch der Blick in's Handbuch (aber wer tut das schon). Da steht das nämlich alles ;)

Ich stelle die Links trotzdem mal rein

SQL Programming (http://publib.boulder.ibm.com/pubs/html/as400/v4r4/ic2924/info/db2/rbafymst02.htm)

SQL reference (http://publib.boulder.ibm.com/pubs/html/as400/v4r4/ic2924/info/db2/rbafzmst02.htm)

Gruss
Rolf

BenderD
12-12-03, 08:35
Hallo Peter,

wichtig wäre hier noch zu wissen welche Bestandteile genau variabel sein sollen. Soweit nämlich mit der Verwendung von prepared Statements prepares wiederverwendbar sind, wird das ganze flotter.

@Rolf: Ganz so einfach ist es nur fast, folgendes Beispiel geht z.B. schief:

SELECT * FROM KUNDE WHERE NAME = <Feld>

wenn in Feld nun O'Hara reinkommt, gibt es einen Laufzeitfehler.
vermeidbar ist auch das mit prepared statements.

also: den Ewald mit

myvar = "SELECT * FROM KUNDE WHERE name = ?"
...
PREPARE xyzStatement
...
OPEN xyz USING :Feld

Fazit: Prepared Statements benutzen, aber dann muss man wieder unterscheiden was Variable sein soll und was nicht. Auf diese Art kann man nämlich z.B. keine Dateinamen oder Feldnamen variabel machen. Dafür werden dann zuweilen sogenannte Deskriptoren empfohlen (würde ich eher die Finger von lasen).

Dieter Bender

B.Hauser
12-12-03, 09:31
Hallo Peter,

eine Erschrwernis kommt noch hinzu:
Da die Felder zum Umwandlungs-Zeitpunkt nicht bekannt sind, kann auch keine Datenstruktur für die Ausgabe festgelegt werden.
Deshalb muss mit einer Descriptor Area (SQLDA) gearbeitet werden.

Birgitta