Die schnellste Variante mit SQL ist:
Etwas langsamger ist:Code:/Free clear MyVar; Exec SQL Select 1 into :MyVar From SysIbm/SysDummy1 where exists (Select 1 from ... inner join ... ... inner join ... ... inner join ...);
Alles andere kannst Du vergessen.Code:/Free Clear MyVar; Exec SQL Select 1 into :MyVar from ... inner join ... ... inner join ... ... inner join ... Fetch first row only;
Beide Methoden müssen aber immer noch langsamer sein als mehrere Chains oder SetLLs nacheinander auszuführen.
Ich vermute, Du hast Optimize for X Rows mit Fetch X Rows only verwechselt.
Optimize for X Rows ist das Optimierungsziel. Ist x eine kleine Zahl wird so optimiert, dass der 1. Block an Daten möglichst schnell zurückkommt. Bei einer sehr großen Zahl wird so optimiert, dass das Gesamt-Ergebnis möglichst schnell ermittelt wird. Ausschlag hat diese Angabe eigentlich nur, wenn der Optimizer überlegt ob Index-Access oder Table Scan.
Bei Select ... Into und Set mit Select-Statement muss sichergestellt werden, dass entweder genau 1 oder kein Datensatz zurückgegeben wird. Werden mehrere Datensätze zurückgegeben, wird ein negativer SQL code ausgegeben werden.
Birgitta
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks