oracle批量将clob字段转换为varchar2字段

问题背景:客户要求必须要用oracle,用工具将mysql库转为oracle库之后,存在部分clob属性的字段,需要转为varchar2

处理方式:通过如下存储过程即可,下述过滤条件记得调整 

create or replace procedure PROC_CLOB2VARCHAR2 as

  tabName       varchar2(200);
  columnName    varchar2(200);
  tmpColumnName varchar2(200);
  stmt          varchar2(500);
begin
dbms_output.ENABLE(buffer_size => null);

  for item in (SELECT t.*
                 FROM user_tab_columns t
                WHERE t.DATA_TYPE = 'CLOB'
                  AND t.TABLE_NAME like '%_DATA_VIEW%'  AND t.TABLE_NAME in(SELECT ut.TABLE_NAME FROM user_tables ut)
                ORDER BY t.COLUMN_NAME) loop

    tabName       := item.table_name;
    columnName    := item.column_name;
    tmpColumnName := item.column_name || '_NEW';

    EXECUTE IMMEDIATE ('ALTER TABLE ' || UPPER(tabName) ||
                      ' RENAME COLUMN ' || UPPER(columnName) || ' to ' ||
                      UPPER(tmpColumnName));
    EXECUTE IMMEDIATE ('ALTER TABLE ' || UPPER(tabName) || ' ADD ' ||
                      UPPER(columnName) || ' VARCHAR2(4000)');
    EXECUTE IMMEDIATE ('UPDATE ' || UPPER(tabName) || ' SET ' ||
                      UPPER(columnName) || ' = TRIM(' || tmpColumnName || ')');
    EXECUTE IMMEDIATE ('ALTER TABLE ' || UPPER(tabName) || ' DROP COLUMN ' ||
                      tmpColumnName);

    /* stmt := ('ALTER TABLE ' || UPPER(tabName) || ' RENAME COLUMN ' ||
    UPPER(columnName) || ' to ' || UPPER(tmpColumnName));*/

    /*  dbms_output.put_line(tabName);
    dbms_output.put_line(columnName);
    dbms_output.put_line(tmpColumnName);
    dbms_output.put_line(stmt);*/
    dbms_output.put_line(tabName || ':' || columnName);

  end loop;
  commit;
end;

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值