Anmelden

View Full Version : Create table lib/file as ...



Robi
18-01-12, 17:12
Hi *all

ich habe hier ein SQLRPGLE Pgm mit einem recht komplexen
SQL Konstrukt
Um das Ergebnis zu prüfen habe ich das Statement auch schon interaktiv ausgeführt.

Da es Host Variablen enthält (ich glaube so heist das, wir sagen immer Doppelpunktfelder) möchte ich nun die Selektion zusätzlich in eine Datei ausgeben.

Also habe ich ein
"Create table qtemp/testfile as ("
davor gesetzt und ein
") with data"
dahinter.

Fehlermeldung beim Wandeln:

Position 37 Host-Variable hier nicht zulässig.

Kann ich beim
create table qtemp/testfile as (
with base as(select ...
where feld = :sollwert ...)
select f1, f2, f3 from base where ...
) with data

keine :variablen verwenden?

Alternativen ?

danke
Robi

B.Hauser
18-01-12, 17:28
Mach das SQL-Statement dynamisch und fühere es mit EXECUTE immediate aus. Etwas in die Richtung:


D MySQLStmt S 1024A Varying

/Free
MySQLStmt = 'Create Table QTEMP/MYTABLE +
as (Select ..... +
From ... +
Where MyFld1 = ' + %Char(MyNumVar) +
' and MyFld2 = ''' + MyCharVar + ''' +
and ... ) +
With Data';

Exec SQL Execute immediate :MySQLStmt;
/End-Free

Birgitta

Robi
19-01-12, 17:40
Hallo Birgitta,
sowas wollt ich vermeiden
die Lesbarkeit und die Pgm Pflege wird so zum Horrortrip.

Wir würden beim Kunden viel mehr mit SQL machen, wenn ich die das SQL Ergebnis einfach in eine Datei umleiten könnte.
(zusätzlich)
Da sowol beim fetch als auch bei massen Updat's
Zum Testen Schalter setzen und dann prüfen ob die verwendeten Sätze die richtigen sind.
Bisher machen wir das vorwiegend interaktiv aber kopier mal 3 Seiten strukturiert geschriebennen Code aus einem Pgm in eine interaktive Sitzung.
(oder umgekehrt)
Anschließend müssen noch die Host-Variablen gesetzt oder entfernd werden

Ich hab das jetzt gemacht, und es funzt erstmal, Danke
Gruß
Robi

B.Hauser
19-01-12, 17:57
Zerlegt Ihr eure komplexen Abfragen nicht in Views und setzt dann nur noch die Where-Bedingungen dazu.

Views können verschachtelt werden. (Ich hab' teilweise Views, die 4 oder 5fach verschachtelt sind).

Da Views keine Schlüssel haben kosten Sie beim Insert/Update und Delete von Datensätzen keine Performance, d.h. du kannst buchstäblich tausende von Views haben ohne irgendwelche Performance-Einbußen.

Die Views könnt Ihr dann sowohl in die Programme einbinden als auch zum Testen verwenden.
... und sofern sich die View ändert, braucht wahrscheinlich noch nicht einmal das Programm angepasst werden.
... und alle SQL Interfaces (incl. Query/400 und Download auf PC) können die Views verwenden.

Wahrscheinlich braucht ihr dann noch nichteinmal temporäre Dateien.

Birgitta