Plsql 如何使用PL/SQL从所有oracle数据库表中删除重复行?

Plsql 如何使用PL/SQL从所有oracle数据库表中删除重复行?,plsql,Plsql,从某个用户拥有的所有表中删除完全重复的行的通用方法。下面是它的存储过程。别忘了用你的用户名替换“你的用户名” 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 OWN

从某个用户拥有的所有表中删除完全重复的行的通用方法。

下面是它的存储过程。别忘了用你的用户名替换“你的用户名”

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;

这是它的存储过程。别忘了用你的用户名替换“你的用户名”

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;