oracle bulk-delete : delete from table where Spalte in array

Ich versuche mich zu sammeln, eine Reihe von Revisionen zahlen.
Ich verwende zum löschen von Datensätzen in mehreren audit-Tabellen.

Also schrieb ich eine plsql zu sammeln, die array-und ausführen, löschen, auf andere Tabellen, basierend auf der Bedingung mit diesem array

declare 
  type NumberArray is table of number index by binary_integer;
  revisions NumberArray;
Begin
  select rev bulk collect into revisions from (
    select t.rev, row_number() over (partition by 
        column1,
        column2
        order by column3) rn
    from table1 t)
  where rn <> 1;

  dbms_output.put_line(revisions.count || ' records found from table2 to be deleted');
  delete from table2 where rev in (revisions);
  dbms_output.put_line('deleted from table2');

Ich bin immer

 PLS-00382: expression is of wrong type
 06550. 00000 -  "line %s, column %s:\n%s"
 *Cause:    Usually a PL/SQL compilation error.

Datentyp der Ausgabe ist die Nummer in Tabelle1.

  • Warum PL/SQL, wenn Sie könnten, tun es einfach in SQL?
  • Daten ist sehr groß.. ich möchte zu Laufzeit
  • Wenn die Daten riesig ist, dann Kontextwechsel wird riesig sein, PL/SQL wird langsamer, viel langsamer als mit SQL.
InformationsquelleAutor Sahu | 2015-01-13
Schreibe einen Kommentar