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