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;
/