2017-02-21 25 views

回答

2

下面是它的存儲過程。不要忘記用您的用戶名替換「YOUR_USERNAME_HERE」。

CREATE OR REPLACE PROCEDURE DELETE_DUPLICATES_FROM_DB 
IS 
    TABLE_COLUMNS VARCHAR2(10000); 
    DELETE_STATEMENT VARCHAR2(10000); 
    CURSOR ALL_MY_TABLES IS SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'YOUR_USERNAME_HERE'; 
BEGIN 
    FOR MY_TABLE IN ALL_MY_TABLES 
    LOOP 
    SELECT LISTAGG(COLUMN_NAME, ',') WITHIN GROUP (ORDER BY 1) INTO TABLE_COLUMNS FROM USER_TAB_COLUMNS WHERE TABLE_NAME = MY_TABLE.TABLE_NAME; 
    DELETE_STATEMENT := 'DELETE FROM ' || MY_TABLE.TABLE_NAME || ' WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM ' || MY_TABLE.TABLE_NAME || ' GROUP BY ' || TABLE_COLUMNS || ');'; 
    EXECUTE IMMEDIATE DELETE_STATEMENT; 
    DBMS_OUTPUT.PUT_LINE(DELETE_STATEMENT);--print the statements we run 
    END LOOP; 
END; 
相關問題