许松--永恒学习屋
努力并不一定会成功,但放弃一定会失败!
posts - 147,comments - 79,views - 19万

在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自增字段自动维护
» 下一篇:oracle11g卸载
posted on   yongheng's blogs  阅读(359)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示