SQLSERVER和ORACLE批量处理表名和字段名大写
在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;?
?
?
轉載于:https://www.cnblogs.com/tippoint/archive/2012/11/07/2758855.html
總結
以上是生活随笔為你收集整理的SQLSERVER和ORACLE批量处理表名和字段名大写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: as3.0全屏代码…
- 下一篇: 6.1 图的深度优先和广度优先搜索