2010-12-09 2 views
0

Ich habe stundenlang Bücher und das Internet durchsucht und konnte kein echtes Glück finden. Da Oracle oder PL/SQL nicht wirklich mein größtes Geschenk im Leben ist, versuche ich es auf diese Weise.Oracle-Datenbanktabelle zur Verwendung als Array zur Ausführung anderer Abfragen

Was ich erreichen möchte, ist wie alle Datensätze in TABELLE A auszuwählen und "jeden" Datensatz innerhalb einer Schleife zu verwenden.

In Pseudo-Code wäre es etwa so.

x = SELECT * aus TABELLE_A; für jeden x UPDATE TABLE_B wo Kätzchen = x; Ende für Schleife

Hilfe?

Antwort

2

mit Cursor-:

DECLARE 
cursor c1 is 
    select monthly_income 
    from employees 
    where name = v_name_in; 
BEGIN 
    FOR employee_rec in c1 
    LOOP 
     update tableB set incom_val = employee_rec.monthly_income where ...; 
    END LOOP; 
END; 

oder:

DECLARE 
    BEGIN 
     FOR employee_rec in (select monthly_income 
           from employees 
           where name = v_name_in) 
     LOOP 
      update tableB set incom_val = employee_rec.monthly_income where ...; 
     END LOOP; 
    END; 
4

Wenn möglich, versuchen Sie es als eine einzelne Update-Anweisung zu schreiben.

update table_b b 
    set (b.col1, b.col2) = (
      select a.colx + 10, a.coly/18 
      from table_a a 
      where b.id = a.id); 

Es ist schneller als das Verfahrensgegenstück und hat auch weniger Codezeilen machen es einfacher für andere Datenbank zu verstehen und zu migrieren.