Neben der Iteration über eine Liste von aufeinanderfolgenden, ganzen Zahlen oder den Records einer Select-Abfrage gibt es eine einfache Möglichkeit in PL/SQL eine Iteration über eine Liste von Werten durchzuführen. Hierfür kann der in Oracle definierte Collection-Typ sys.dbms_debug_vc2coll
verwendet werden.
Mit diesem Collection-Typ kann eine Liste von Werten als Zeichenfolgen gespeichert werden und über eine select
-Abfrage in einer Cursor For-Schleife verwendet werden, wie im nachfolgenden Beispiel gezeigt wird. Der Feldname für den Zugriff auf die Werte der Collection heist column_value
.
declare v_coll sys.dbms_debug_vc2coll := sys.dbms_debug_vc2coll( 'AB', 'CD', 'EF', 'GH' ); begin for i in ( select column_value as x from table( v_coll ) ) loop dbms_output.put_line( i.x ); end loop; end; /
Alternativ kann man auch selbst einen eigenen Typ definieren, wobei man dann nicht auf den Datentyp varchar2
eingeschränkt ist (in den folgenden Beispielen wird eine Liste von numerischen Werten erstellt):
declare type nt_type is table of number; nt nt_type := nt_type ( 25.1, 28.3, 30.5, 33.7 ); begin for i in 1..nt.count loop dbms_output.put_line( nt( i ) ); end loop; end; /
Dieser eigene Typ kann auch direkt in der Datenbank angelegt werden, um diesen an mehreren Stellen zu verwenden:
create type number_table is table of number;
und dann in einer for
-Schleife verwendet werden
begin for i in (select column_value as x from table ( number_table ( 25.1, 28.3, 30.5, 33.7 ) ) ) loop dbms_output.put_line( i.x ); end loop; end; /