达梦数据库去重复行存储过程

/一个去重的小存储过程,参数为模式名/
CREATE OR REPLACE
PROCEDURE P_REMOVE(SCHEMA_NAME VARCHAR(50))
AS
V_ALL_COLUMS VARCHAR(1000);
BEGIN
FOR REC IN
(
SELECT
OWNER AS SCH_NAME,
TABLE_NAME AS TAB_NAME
FROM
ALL_TABLES
WHERE
OWNER =SCHEMA_NAME --指定模式名

    )
    LOOP
            BEGIN
                    select
                            WM_CONCAT(COLUMN_NAME)
                    INTO
                            V_ALL_COLUMS
                    from
                            ALL_TAB_COLUMNS
                    where
                            table_name=REC.TAB_NAME
                        AND OWNER    =REC.SCH_NAME;
                --PRINT 'delete from "'||REC.SCH_NAME||'"."'||REC.TAB_NAME||'"'||' WHERE ('||V_ALL_COLUMS||') in (select ' ||V_ALL_COLUMS||' FROM '||REC.SCH_NAME||'.'||REC.TAB_NAME||' group by '||V_ALL_COLUMS|| ' having count(*) > 1) and rowid not in (select min(rowid) from '||REC.SCH_NAME||'.'||REC.TAB_NAME ||' group by '||V_ALL_COLUMS||' having count(*) > 1)';
                    EXECUTE IMMEDIATE 'delete from "'||REC.SCH_NAME||'"."'||REC.TAB_NAME||'"'||' WHERE ('||V_ALL_COLUMS||') in (select ' ||V_ALL_COLUMS||' FROM '||REC.SCH_NAME||'.'||REC.TAB_NAME||' group by '||V_ALL_COLUMS|| ' having count(*) > 1) and rowid not in (select min(rowid) from '||REC.SCH_NAME||'.'||REC.TAB_NAME ||' group by '||V_ALL_COLUMS||' having count(*) > 1)';
                    COMMIT;
            END;
    END LOOP;

END ;

/例如,去重test用户下的表/
call P_REMOVE(‘TEST’);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值