oracle导入达梦数据库后,处理NULL值变成字符串问题

--将当前用户下的所有表中字符串“NULL”,替换为NULL

CREATE OR REPLACE PROCEDURE REPLACE_UNLL
AUTHID DEFINER

AS
  v_count NUMBER;
  v_exception_flag NUMBER;

BEGIN
  FOR t IN (SELECT table_name, column_name
            FROM user_tab_columns
            WHERE data_type = 'VARCHAR2') LOOP
     -- 初始化异常标志为0,表示没有异常
     v_exception_flag := 0;

     BEGIN
       -- 执行动态SQL查询,并将结果存储在v_count变量中
       EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM "' || t.table_name || '" WHERE "' || t."column_name" || '" = ''NULL''' INTO v_count;

       -- 判断v_count是否等于0,如果不等于0则执行更新
       IF v_count != 0 THEN
         EXECUTE IMMEDIATE 'UPDATE "' || t.table_name || '" SET "' || t.column_name || '" = NULL WHERE "' || t."column_name" || '" = ''NULL''';

       END IF;
     EXCEPTION
       WHEN OTHERS THEN
         -- 捕获异常,设置异常标志为1         
         v_exception_flag := 1;
          PRINT '出现错误的语句: ' || 'UPDATE "' || t.table_name || '" SET "' || t.column_name || '" = NULL WHERE "' || t."column_name" || '" = ''NULL''' ||' 错误信息: ' || SQLERRM;
     END;

     -- 如果异常标志为0(没有异常),继续下一次循环;否则,跳过本次循环
     IF v_exception_flag = 0 THEN
       CONTINUE; -- 继续下一次循环
     END IF;
  END LOOP;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值