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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein guter Kandidat für FORALL Anweisung
Aber wenn Sie immer noch darauf bestehen, IN der Bedingung, die Sie festlegen müssen, in Ihre Art auf der schema-Ebene:
und dann verwenden Sie es wie diese
Muss es diese sein:
Wie schon geschrieben von Marcin Wroblewski, der geschachtelten Tabelle erstellt werden, die auf Schema-Ebene.
... Und warum würden Sie es tun in PL/SQL, wenn es getan werden könnte, in plain SQL? Sie sind unnötig Einführung Kontextwechsel zwischen den beiden Motoren.
Alle, die PL/SQL-code ist nichts anderes als eine einfache DELETE-Anweisung -