SQLSERVER和ORACLE批量处理表名和字段名大写
2016-07-14 14:12
351 查看
原文链接:http://www.cnblogs.com/tippoint/archive/2012/11/07/2758855.html
在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "testtable"但是很多情况下,这样做的代价很大,因为很多程序的代码是早已经写好的,而要修改oracle系统配置又不安全,一个比较稳妥的办法是批量修改表名和文件名。
先说在SQL中修改表名和字段名的办法:虽然在sql中默认是不区分表名和字段名的大小写的,但是通过sql的DTS进行数据导出导入的时候,如果表名和字段名是小写,那生成的代码中对应也是小写,反之亦然。因此通过此办法生成oracle数据表的时候就需要首先批量把sql中的表名和字段名都修改为大写,下面给出的是对应的代码。
批量修改表名:
1 declare @sql varchar(300)--,@rowcount varchar(10),@dyncnum int
2 declare @tablename varchar(100)
3 declare cursor1 cursor for
4 select name from sysobjects where xtype = 'u' order by name
5 open cursor1
6 fetch next from cursor1 into @tablename
7 while @@fetch_status=0
8 begin
9 set @sql='sp_rename '''+@tablename+''','''+upper(@tablename)+''''
10 print @sql
11 --exec(@sql)
12 fetch next from cursor1 into @tablename
13 end
14 close cursor1
15 deallocate cursor1
批量修改字段名代码:
1 declare @sql varchar(300)
2 declare @tablecolumnname varchar(100), @columnname varchar(100)
3 declare cursor1 cursor for
4 select b.name+'.['+a.name+']',a.name from syscolumns a ,sysobjects b where a.id = object_id(b.name) and b.xtype = 'u' and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36
5 open cursor1
6 fetch next from cursor1 into @tablecolumnname,@columnname
7 while @@fetch_status=0
8 begin
9 set @sql='sp_rename '''+@tablecolumnname+''','''+upper(@columnname)+''',''column'''
10 --print @sql
11 exec(@sql)
12 fetch next from cursor1 into @tablecolumnname,@columnname
13 end
14 close cursor1
15 deallocate cursor1
还有一种情况就是,表已经导入到oracle中了,但是发现表名和字段名都是小写,需要在oracle中修改表名和字段名。
这个时候,我们需要使用一种办法来帮我们自动生成修改的语句,然后copy出来执行就可以了。
修改表名:
1 select 'alter table "'||table_name||'" rename to '||upper(table_name)||';' from user_tables where table_name<>upper(table_name);
修改字段名:
1 select 'alter table '||table_name||' rename column "'|| column_name ||'" to '||upper(column_name)||';'
2 from user_tab_columns where column_name<>upper(column_name);
这个时候,我们可以在sql plus或者toad等客户端工具中生成对应的alter语句,然后copy出来执行就ok了。
引申一下,如果需要把oracle中的数据全部清空或者把表全部删除,也可以采用如上的方式
--清除数据
select 'TURNCATE table '||table_name ||';' from user_tables;
--删除表
select 'drop table '||table_name ||';' from user_tables;
在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "testtable"但是很多情况下,这样做的代价很大,因为很多程序的代码是早已经写好的,而要修改oracle系统配置又不安全,一个比较稳妥的办法是批量修改表名和文件名。
先说在SQL中修改表名和字段名的办法:虽然在sql中默认是不区分表名和字段名的大小写的,但是通过sql的DTS进行数据导出导入的时候,如果表名和字段名是小写,那生成的代码中对应也是小写,反之亦然。因此通过此办法生成oracle数据表的时候就需要首先批量把sql中的表名和字段名都修改为大写,下面给出的是对应的代码。
批量修改表名:
1 declare @sql varchar(300)--,@rowcount varchar(10),@dyncnum int
2 declare @tablename varchar(100)
3 declare cursor1 cursor for
4 select name from sysobjects where xtype = 'u' order by name
5 open cursor1
6 fetch next from cursor1 into @tablename
7 while @@fetch_status=0
8 begin
9 set @sql='sp_rename '''+@tablename+''','''+upper(@tablename)+''''
10 print @sql
11 --exec(@sql)
12 fetch next from cursor1 into @tablename
13 end
14 close cursor1
15 deallocate cursor1
批量修改字段名代码:
1 declare @sql varchar(300)
2 declare @tablecolumnname varchar(100), @columnname varchar(100)
3 declare cursor1 cursor for
4 select b.name+'.['+a.name+']',a.name from syscolumns a ,sysobjects b where a.id = object_id(b.name) and b.xtype = 'u' and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36
5 open cursor1
6 fetch next from cursor1 into @tablecolumnname,@columnname
7 while @@fetch_status=0
8 begin
9 set @sql='sp_rename '''+@tablecolumnname+''','''+upper(@columnname)+''',''column'''
10 --print @sql
11 exec(@sql)
12 fetch next from cursor1 into @tablecolumnname,@columnname
13 end
14 close cursor1
15 deallocate cursor1
还有一种情况就是,表已经导入到oracle中了,但是发现表名和字段名都是小写,需要在oracle中修改表名和字段名。
这个时候,我们需要使用一种办法来帮我们自动生成修改的语句,然后copy出来执行就可以了。
修改表名:
1 select 'alter table "'||table_name||'" rename to '||upper(table_name)||';' from user_tables where table_name<>upper(table_name);
修改字段名:
1 select 'alter table '||table_name||' rename column "'|| column_name ||'" to '||upper(column_name)||';'
2 from user_tab_columns where column_name<>upper(column_name);
这个时候,我们可以在sql plus或者toad等客户端工具中生成对应的alter语句,然后copy出来执行就ok了。
引申一下,如果需要把oracle中的数据全部清空或者把表全部删除,也可以采用如上的方式
--清除数据
select 'TURNCATE table '||table_name ||';' from user_tables;
--删除表
select 'drop table '||table_name ||';' from user_tables;
相关文章推荐
- oracle 日期格式汇总
- 4.Hibernate HQL查询1
- Oracle 序列使用时:ORA-08002: 序列 SEQ_WGB_TEST2.CURRVAL 尚未在此会话中定义
- ORACLE分页查询
- Oracle对表解锁的操作
- 好记性不如烂笔头之Oracle SQL优化(2)
- 好记性不如烂笔头之Oracle SQL优化(1)
- 数据库(学习整理)----2--关于Oracle用户权限的授权和收权
- 查询Oracle中某些表或者某张表的信息(备注、主键、owner等)
- Oracle中文(汉字)排序的问题
- Oracle创建表后修改表字段,增加字段
- oracle 11g physical standby switchover steps
- oracle数据库的字符集更改
- oracle的restricted mode(受限模式)
- python 调用oracle 存储过程 监控表空间(二)
- oracle表分区详解
- pyhton链接oracle
- oracle数据库获取指定表的列的相关信息
- oracle基础教程:数据库的范式
- oracle数据库中的函数依赖