Anmelden

View Full Version : SQL script mit goto oder schleife



Robi
08-01-26, 14:10
Moin und frohes Neues...,

es würde einem ablauf einiges an Zeit sparen wenn ich in einer SEU source eine schleife oder ein goto hin bekäme

Also
LIB/QSQLSRC, meinSql --> SEU


begin
declare continue hander for sqlexeption
begin end;
create variable STT int default(5);

TAG-PUNKT oder SCHLEIFE 2 * start

insert into ... es wird auch STT in der Datei gesetzt
insert into ... es wird auch STT in der Datei gesetzt
insert into ... es wird auch STT in der Datei gesetzt
...

Update ...

set STT 0;

goto oder schleifen ende


noch nie gebraucht, aber jetzt ...
geht das?

Das script wird in einem CLLE Pgm gerufen
ich kann auch 3 skripte machen
1: SST = 5
2: insert ... und Update ...
3: SST = 0

und dann einfach das 2. erneut aufrufen

Und, wenn wir schon dabei sind ...
könnte ich SST im script abfragen und den Update nur machen wenn es auf 5 steht?

ja, ich weis ...

Danke
VG
Robi

Andreas_Prouza
08-01-26, 15:08
Du könntest bei deinem Script all das in eine sql procedure stecken.
Vereinfacht gesagt: Du bräuchtest zu begin des scripts lediglich ein create procedure proc1 ...
und am ende ein call proc1

Dann kannst alles darin machen was du willst.

BenderD
09-01-26, 09:36
... ich verstehe bislang nicht, was du bewerkstelligen willst und mit welchen Mitteln du das versuchen willst. "Declare xyz Handler" ist in der Schublade SQL Procedure und in der sind auch Schleifenkonstrukte. In SQL Skripten geht das nicht.
Generell würde ich SQL Procedures im DB2 auf der AS400 nur in Betracht ziehen, wenn ich einen positiven Grund dafür habe. Die Implementierung mit dem generierten C Programm mit embedded SQL ist lausig, von schlechter Qualität und wenig transparent. In den meisten Fällen würde ich da per Hand gedengltes embedded SQL in der Programmiersprache meiner Wahl vorziehen.

D*B

B.Hauser
11-01-26, 12:56
Ich denke Du hast ein dynamisches Compound-Statement und willst einfach nur wissen, wie in SQL (PL) eine Schleife programmiert wird.

SQL unterstützt 3 verschiedene Schleifen:

LOOP ... END LOOP; Endlos Schleife, die mit LEAVE :Tag verlassen werden muss.
WHILE Bedingung DO ... END WHILE; Do While Schleife, wird solange wiederholt wie die Bedingung wahr ist.
REPEAT ... UNTIL Bedingung END REPEAT; Do Until Schleife, wird solange wiederholt wie die Bedingung nach UNTIL falsch ist



TagLeave: Loop
-- auszuführende SQL Statements
If -- Ende-Bedingung
Then Leave :TagLeave;
End If;
-- auszuführende SQL Statements
End Loop;

TagLeave: WHILE -- Condition = True,
-- z.B. WHILE VarDate < Current_Date (Achtung KEIN Semi Colon!)
DO -- auszuführende SQL Statements
-- zusätzliche IF-Bedingung mit LEAVE erlaubt
End While;

TagRepeat: Repeat
-- auszuführende SQL Statements
-- zusätzliche IF-Bedingung mit LEAVE erlaubt
Until -- Condition - wenn Bedingung = True
-- z.B. UNTIL VarDate >= Current Date (Achtung KEIN Semi Colon!)
End Repeat

Fuerchau
11-01-26, 17:51
Funktioniert dies auch im SQL-Script via ACS, Embedded execute oder nur in Function/Procedures?

Allternativ kannst du die Schleife auch im CLLE/CLP durchführen und simple RUNSQL aufrufen.
Diese kannst du auch in einer Variablen mit Parametern und *CAT zusammenbauen.

B.Hauser
11-01-26, 18:28
Das ist SQL Programmierung und funktioniert einer SQL Routine (Stored Procedure, User Defined (Table) Function, SQL Trigger).
Das gleiche gilt für ein dynamisches Compound Statement, bei dem im Untergrund eine Stored Procedure in der QTEMP erstellt und anschließend ausgeführt wird.
Dynamic Compound Statement (https://www.ibm.com/docs/en/i/7.6.0?topic=triggers-dynamic-compound-statement)

Fuerchau
11-01-26, 19:29
Da empfehle ich dann doch lieber die klassische embedded Methode.
Klar, wenn einer nur SQL und keine HLL-Sprachen kennt, für den mag das dann sinnvoll sein;-).

Robi
13-01-26, 11:13
Danke Euch:cool:

ich suchte tatsächlich nach einer möglichkeit in einer SEU Source die via RunSQLStm aufgerufen wird.

Hintergrund sind mehrere Änderungen / Woche die dann von der Fachabteilung ohne 'EDV/SQL'- Kentnissen gemacht hätten werden sollen.

Hat sich erübrigt, nun versucht man endlich die Ursache ab zu stellen anstatt die Symtome zu bekämpfen.
Wenn der richtige meckert, spuren auch die Lieferanten:rolleyes:

Also... weiter geht's

Danke