PDA

View Full Version : SQL - Problem



muadeep
27-07-05, 09:27
Habe von einer Fremdfirma ein SQL-Script bekommen, welches
ich vorher auf einer Testmaschine laufen lassen will!

Habe auf der Testmachine eine phys. Quellendatei "QTXTSRC" in Bibliothek "xxx" erstellt (mit einer max. Satzlänge von 240 Ste.)
Grund für die 240 Stellen ist der, daß das SQL Script einfach solange Zeilen beinhaltet!

Beispiel:
create table Querverweis (
ID integer not null,
Code varchar(40) not null,
Info varchar(100) ,
Kontext_Links integer not null,
Kontext_Rechts integer not null,
Code_Links varchar(40) not null,
Code_Rechts varchar(40) not null,
constraint PK_QUERVERWEIS primary key (ID),
constraint UK_QUERVERWEIS_CODE unique (Code, Kontext_Links, Kontext_Rechts) )
;

wenn ich jetzt dieses Script mit CMD -
RUNSQLSTM SRCFILE(xxx/QTXTSRC) SRCMBR(SIPX) laufen lasse,
dann bekomme ich einen Fehler:
Befehl RUNSQLSTM fehlgeschlagen.

1 create table Querverweis (
2 ID integer not null,
3 Code varchar(40) not null,
4 Info varchar(100) ,
5 Kontext_Links integer not null,
6 Kontext_Rechts integer not null,
7 Code_Links varchar(40) not null,
8 Code_Rechts varchar(40) not null,
9 constraint PK_QUERVERWEIS primary key (ID),
10 constraint UK_QUERVERWEIS_CODE unique (Code, Kontext_Links, Kontext_Rechts)
11 ;

MSG ID WTK SATZ TEXT
SQL0104 30 11 Position 1 Token <ENDE DER ANWEISUNG> ungültig. Gültige Token: ) ,.

warum in Zeile 11?
und nicht in Zeile 10, da fehlt nämlich nach der letzten ")" noch eine ")" die einfach abgeschnitten wird?

alle Zeilen, die länger sind als 80 Ste. werden automatisch abgeschnitten, und laufen dann auch auf einen Fehler !!!!

Fuerchau
27-07-05, 09:34
Du musst halt die Quelle auf 80 Stellen verkürzen und anpassen.
Zeile 11 wird gemeldet, da die Klammer ja dort stehen müsste.
RUNSQLSTM liest alle Zeilen und stellt dieser einfach hintereinander. Wo also ein Zeilenumbruch stattfindet ist vollkommen egal.

B.Hauser
27-07-05, 09:38
Anstatt einer Text-Datei könntest Du die Quellen ins IFS packen und über den iSeries Navigator laden und ausführen.
(oder natürlich auch mit drag and drop kopieren)

Dann gibt es auch keine Probleme mit der Satz-Länge.

Wenn Du die Informationen in einer Text-Source haben willst, kannst Du dies, nachdem die Objekte erstellt sind mit dem iSeries Navigator bewerkstelligen (Reverse Engineering). Das Ergebnis sieht zwar nicht besonders schön aus, aber immerhin, erfolgt der Zeilenumbruch korrekt.

Birgitta

muadeep
27-07-05, 13:06
d. h. also, das obwohl die phys. Quellendatei größer als 80 Zeichen ist, wird trotzdem bei 80 Zeichen abgeschnitten!

das SQL-Script der Fremdfirma ist 229 DINA4 Seiten lang, und das komplett zu überarbeiten, so daß es nur noch 80 Zeichen sind, ist nicht grad so mein Ding!

Eine Frage zu:
Quellen ins IFS packen und über den iSeries Navigator laden und ausführen

in den Script sind keine Bibliotheken angegeben !!!!
würde das dann nicht bedeuten, daß die Dateien, etc. in der QGPL erstellt werden?

wie geht das genau mit dem erstellen in IFS und anschließenden ausführen?

Fuerchau
27-07-05, 13:39
Per CPYFRMSTMF kann die Quelle aus dem IFS auch in eine SRCPF kopiert werden, ein Zeilenumbruch erfolgt automatisch.
Ob allerdings der RUNSQLSTM so lange SQL's verarbeitet ?
Besser wäre da der OpsNav, der "XXX.SQL"-Dateien ausführen kann.
Die Standardbibliothek ist allerdings USRPRF-Name oder, wenn diese nicht vorhanden eben QGPL.

muadeep
27-07-05, 14:44
wie mach ich das denn mit dem OpsNav?


hab folgendes gemacht:
- mit WRKLNK und "CRTDIR DIR(xxx)" ein Verzeichnis erstellt
- mit dem OpsNav eine Freigabe auf dieses Verzeinis eingerichtet
- mit dem Explorer eine Verknüpfung zu diesem Verzeichnis erstellt
- das SQL-Script in eine Datei yyy.sql kopiert und diese in das neu
erstellt Verzeichnis (WRKLNK, ...) gestellt

wie kann ich jetzt von dort mit dem OpsNav ein SQL ausführen!
(find da nicht's)

Fuerchau
27-07-05, 15:17
Der OpsNav braucht keine Freigabe sondern kann die SQL's direkt ausführen.
Vom IFS kannst du die .SQL in eine SRCPF per CPYFRMSTMF kopieren.

Normalerweise reicht im Explorer ein Doppelklick auf .SQL, da diese mit dem OpsNav verknüpft sind.