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;
/
Neueste Beiträge

Beschreibung, wie eine EXT4-Partition vergrößert werden kann, ohne dass die Daten gelöscht werden.

Wie kann beim Systemstart Postfix erst nach Docker gestartet werden?

Kurze Beschreibung, wie ein Upgrade von Ubuntu LTS auf eine neue Version erfolgen kann

Beschreibung, wie die Synchronisation der Systemzeit mit einem Zeitserver über den systemd-timesyncd-Dienst eingestellt werden kann.