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; 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM