«

»

Dez 28

FOR-Schleife über eine Liste von Werten

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 [cci lang=“plsql“]sys.dbms_debug_vc2coll[/cci] verwendet werden.

Mit diesem Collection-Typ kann eine Liste von Werten als Zeichenfolgen gespeichert werden und über eine [cci]select[/cci]-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 [cci]column_value[/cci].

[cc lang=“plsql“]
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;
/
[/cc]

Alternativ kann man auch selbst einen eigenen Typ definieren, wobei man dann nicht auf den Datentyp [cci]varchar2[/cci] eingeschränkt ist (in den folgenden Beispielen wird eine Liste von numerischen Werten erstellt):

[cc lang=“plsql“]
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;
/
[/cc]

Dieser eigene Typ kann auch direkt in der Datenbank angelegt werden, um diesen an mehreren Stellen zu verwenden:

[cc lang=“plsql“]
create type number_table is table of number;
[/cc]

und dann in einer For-Schleife verwendet werden

[cc lang=“plsql“]
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;
/
[/cc]