批量将Oracle里的表名和列名改为大写

有时候我们需要从SQL Server数据库导入一些表数据到Oracle数据库。

当数据导入成功后却发现按字段进行查询却老是提示列不存在。

这时就需要我们将表名和字段名批量修改为大写方式。

存储过程如下:

create or replace procedure PD_BATCHRENAMETOUPPER
AS
mysql varchar2(1000);
cursor cur is select table_name from user_tables where table_name<>upper(table_name);
BEGIN
   --批量更新表名
   FOR row IN cur LOOP
     mysql:='alter table "'||row.table_name||'" rename to '||upper(row.table_name);
     dbms_output.put_line(mysql);
     execute immediate mysql;
   END LOOP;
   --批量更新列名
   FOR cl IN (SELECT table_name,column_name from user_tab_columns WHERE column_name<>upper(column_name) and upper(column_name) not in('SIZE','CHECK'))
   LOOP
       mysql:='alter table '||cl.table_name||' rename column "'|| cl.column_name ||'" to '||upper(cl.column_name);
       dbms_output.put_line(mysql);
       execute immediate mysql;
   END LOOP;
END;

执行存储过程即可:

begin
 PD_BATCHRENAMETOUPPER();
end;

注意:有时候可能字段名是一些关键字,导致执行失败,可以根据错误提示将关键字在存储过程中进行过滤排除,然后重新编辑存储过程再次执行即可。

 

posted @ 2013-05-27 18:02  贝加  阅读(1486)  评论(0编辑  收藏  举报