SQL: dynamisches Select ohne Cursor

5. Dezember 2013 | Von | Kategorie: Tools, Hot-Tips

In einem System iNetwork Forum tauchte die Frage auf, ob in SQL eine dynamische Select-Anweisung ausgeführt werden kann, ohne zuvor einen Cursor zu definieren. Birgitta Hauser hatte dazu eine Lösung vorgeschlagen.

pa12_cvs_IMG_6942VON SCOTT KLEMENT

Der Trick ist, die Select-Anweisung innerhalb einer Values-Anweisung unterzubringen. Angenommen die folgende statische SQL-Abfrage soll, aus welchen Gründen auch immer, in eine dynamische umgewandelt werden:

exec SQL Select PERSNAME into :PersonalName
from MITARBPF
where PERSNR=:PersonalNr

In dem Programm werden zunächst folgende Variablen definiert:

D Tabelle s 21a inz(‘MITARBPF‘)
D PersonalNr s 5p 0 inz(12345)
D PersonalName s 25a
D SQL_VALUES s 1000a varying

Da der Dateiname als Variable Tabelle definiert wurde, könnte dieser sogar vor der Ausführung der SQL Anweisungen geändert werden:

/free 
Tabelle = ‚MITARBPF2‘ 
SQL_VALUES = ‚values( select PERSNAME from ‚ 
+ %trim( Tabelle ) 
+ ‚ where PERSNR=? 
+ ‚) into ?; 
exec SQL Prepare Stmt from :SQL_VALUES; 
exec SQL Execute Stmt using :PersonalNr,: PersonalName; 
/endfree

Beim Einsatz dynamischer SQL-Anweisungen sollten Sie sich vorher Gedanken über die Notwendigkeit und eventuelle Performance-Einbußen machen.

Scott Klement ist technischer Redakteur für NEWSolutions. Außerdem ist er IS Manager der Klement Sausage Co., Inc. Sie erreichen ihn unter iSN (ät) Scott-Klement.com.

Schlagworte: , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.