Nochmal hallo!
Hier ein PL/SQL-Script (mit SQL*Plus ausführen), das entsprechende SQL-Statements für alle Tabellen des aktuellen User-Schemas kreiert…
ciao, Bernhard
------------------------------------------------------------------- Löschen von Tupelduplikaten im gesamten User-Schema
CREATE TABLE update_statements (
statement VARCHAR2 (2000)
)
/
DECLARE
v_statement VARCHAR2 (2000);
v_columns VARCHAR2 (2000);
v_firstcolumn BOOLEAN;
BEGIN
FOR cur_table IN (SELECT * FROM user_tables) LOOP
v_firstcolumn := TRUE;
FOR cur_columns IN
(SELECT * FROM user_tab_columns
WHERE table_name = cur_table.table_name
ORDER BY column_id) LOOP
IF v_firstcolumn THEN
v_firstcolumn := FALSE;
v_columns := cur_columns.column_name;
ELSE
v_columns := v_columns || ', ’ || cur_columns.column_name;
END IF;
END LOOP; – FOR cur_columns IN…
v_statement :=
'DELETE FROM ’ || cur_table.table_name ||
’ WHERE ROWID NOT IN (SELECT MIN (ROWID) FROM ’ || cur_table.table_name ||
’ GROUP BY ’ || v_columns || ‚);‘;
INSERT INTO update_statements VALUES (v_statement);
END LOOP; – FOR cur_table IN…
COMMIT;
END;
/
SET LINESIZE 2000
SET PAGESIZE 0
SET TRIMSPOOL ON
SPOOL c:\temp\update.sql
SELECT * FROM update_statements;
SPOOL OFF
Rem Jetzt c:\temp\update.sql anschauen & editieren, gfs. Einträge löschen
Rem Alles Ok? Dann Script ausführen…
Rem @c:\temp\update.sql