SQLSERVER和ORACLE批量处理表名和字段名大写

原文链接: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; 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值