好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)

前言

今天查询一个数据字段一直提示字符无效,明明在数据库表字段中是存在的;

查询后得知,数据库表字段为小写时,查询需要将字段名小写并加上双引号;

表名同理,我这里表名是大写,暂时不需要改。

搜到一个批量修改字段名为大写的存储过程,如下:

登陆到要修改的用户下,

执行:

?

1

2

3

4

5

6

7

8

9

10

begin

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

begin

execute immediate 'alter table ' ||cl.table_name|| ' rename column "' || cl.column_name || '" to ' || upper (cl.column_name);

exception

when others then

dbms_output.put_line(cl.table_name|| '.' ||cl.column_name|| '已存在' );

end ;

end loop;

end ;

即完成该用户下所有表字段名改为大写的过程。

附上批量修改表名为大写的存储过程,以备后用:

?

1

2

3

4

5

6

7

8

9

10

11

-- oracle 批量修改表名为大写(当前登录用户)

begin

for c in ( select table_name tn from user_tables where table_name <> upper (table_name)) loop

begin

execute immediate 'alter table "' ||c.tn|| '" rename to ' ||c.tn;

exception

when others then

dbms_output.put_line(c.tn|| '已存在' );

end ;

end loop;

end ;

再附 字段类型批量修改(此时表内无内容):

?

1

2

3

4

5

6

7

8

9

10

11

DECLARE

   CURSOR TEMP IS SELECT TABLE_NAME,COLUMN_NAME,DATA_LENGTH FROM USER_TAB_COLUMNS WHERE DATA_TYPE = 'NVARCHAR2' AND ROWNUM < 100;

   STR VARCHAR2(100) := '' ;

  BEGIN

    FOR S IN TEMP LOOP

     STR := 'ALTER TABLE ' ||S.TABLE_NAME|| ' MODIFY(' ||S.COLUMN_NAME|| ' VARCHAR2(200))' ;

     DBMS_OUTPUT.PUT_LINE(STR);

    EXECUTE IMMEDIATE STR ;

   

    END LOOP;

  END ;

到此这篇关于Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)的文章就介绍到这了,更多相关Oracle批量将表字段名转换为大写内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_32392597/article/details/109599007

查看更多关于Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)的详细内容...

  阅读:21次