成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL轉Oracle遇到的問題:表名長度及大小寫問題

數據庫 MySQL
Oracle限制了表名長度最大30個字節,也就是說字母+數字+字符一共有30個長度,如果有個別表名超過了30字節,那么需要重新取名,字段名貌似也有這個限制,不過我沒有遇到,如果遇到了,那么同樣要做縮減。

最近做項目,有需求是要把項目從MySql轉為Oracle數據庫,于是就有了這篇文章。簡單記錄一下,以后再有需要拿來用。

首先是MySql整庫遷移到Oracle,方法比較簡單,用Navicat數據傳輸功能,可以很方便的搞定,其中只有一項需要注意的地方(我只遇到一個),就是Oracle限制了表名長度最大30個字節,也就是說字母+數字+字符一共有30個長度,如果有個別表名超過了30字節,那么需要重新取名,字段名貌似也有這個限制,不過我沒有遇到,如果遇到了,那么同樣要做縮減。同時要更改代碼中實體和字段名的對應關系。

接下來就是Oracle另一個限制,大小寫的問題。相信很多同道和我一樣,習慣于MySql數據庫表名和字段名小寫,那么在庫遷移過程中大小寫是不會變化的,但是在Oracle中,如果表名和字段名在定義的時候是小寫的,那么SQL操作時候,表名和字段名是需要用引號括起來的,但是之前項目中的SQL完全沒有這么寫過,那怎么辦,改代碼嗎?我想大部分人都會選擇去改數據庫解決這個問題——把數據庫中表名和字段名都改成大寫就可以解決這個問題了。

我手動改了兩張表之后,看著剩下的155張表陷入了沉思:不可能,這個世界上最懶的人就是程序員,程序員不可能用這樣的方法去改,趕快找好搭檔搜索引擎來一波。果然天無絕人之路。找到了幾個存儲過程,完美解決這個問題:

  • 將指定表所有字段變為大寫(把“表名”替換成要修改的表名就可以了)。
begin
for c in (select COLUMN_NAME cn from all_tab_columns where table_name='表名') loop
begin
execute immediate 'alter table 表名 rename column "'||c.cn||'" to '||c.cn;
exception
when others then
dbms_output.put_line('表名'||'.'||c.cn||'已經存在');
end;
end loop;
end;
  • 批量將表名變為大寫。
begin
for c in (select table_name tn from user_tables where table_name <> upper(table_name)) loop
begin
execute immediate 'alter table "'||c.tn||'" rename to '||c.tn;
exception
when others then
dbms_output.put_line(c.tn||'已存在');
end;
end loop;
end;
  • 批量將空間內所有表的所有字段名變成大寫。
begin
for t in (select table_name tn from user_tables) loop
begin
for c in (select column_name cn from user_tab_columns where table_name=t.tn) loop
begin
execute immediate 'alter table "'||t.tn||'" rename column "'||c.cn||'" to '||c.cn;
exception
when others then
dbms_output.put_line(t.tn||'.'||c.cn||'已經存在');
end;
end loop;
end;
end loop;
end;
  • 將用戶空間的所有表名及所有字段變為大寫。
begin
for t in (select table_name tn from user_tables where table_name <> upper(table_name)) loop
begin
for c in (select column_name cn from user_tab_columns where table_name=t.tn) loop
begin
execute immediate 'alter table "'||t.tn||'" rename column "'||c.cn||'" to '||c.cn;
exception
when others then
dbms_output.put_line(t.tn||'.'||c.cn||'已經存在');
end;
end loop;

execute immediate 'alter table "'||t.tn||'" rename to '||t.tn;
exception
when others then
dbms_output.put_line(t.tn||'已存在');
end;
end loop;
end;

相信這幾個存儲過程就足夠解決大多數問題了。

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-06-04 10:30:41

MySQL表名大小

2017-06-12 16:10:05

MySQL表名

2021-06-15 09:39:45

Oracle敏感數據庫

2010-11-25 16:09:58

mysql查詢大小寫

2011-03-30 10:05:04

Mysql數據庫名表名

2011-08-30 10:10:30

UbuntuLinuxMySQL

2010-11-23 13:42:18

mysql數據庫大小寫

2010-05-11 13:25:18

Mysql大小寫

2010-06-07 13:00:34

MySQL數據庫

2011-05-07 10:47:29

Oracle大小寫

2010-11-26 11:40:19

MySQL字符串大小寫

2024-04-01 07:53:51

MySQL索引字符

2010-10-27 17:16:51

Oracle查詢

2010-09-25 15:49:07

SQL修改

2010-10-11 15:47:46

MySQL字符串大小寫

2010-05-26 15:24:09

MySQL字符串

2010-04-15 13:33:34

Oracle服務啟動

2017-09-27 15:20:23

PHPerLaravelMysql

2010-06-04 20:04:10

MySQL數據庫大小寫

2009-06-21 13:44:21

LinuxTr大小寫轉換
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本国产一区二区 | 亚洲精品一区中文字幕 | 天天操天天干天天透 | 在线一区二区三区 | 91久久久久久 | 超碰在线97国产 | 日韩字幕| 亚洲一区二区三区免费视频 | 一区二区三区四区在线视频 | 国产三级在线观看播放 | 91精品国产综合久久久久久漫画 | 99久久99 | 国产精品毛片一区二区在线看 | 精品三级| 国产亚洲精品久久久久久牛牛 | 国产三区在线观看视频 | 1000部精品久久久久久久久 | 色综合一区二区 | 久久99精品久久久 | av综合站| 久久精彩视频 | 亚洲视频精品 | 91精品国产综合久久精品图片 | 欧美精品欧美精品系列 | 中文字幕亚洲一区二区va在线 | 亚洲人成网亚洲欧洲无码 | 国产欧美在线观看 | 亚洲综合区 | 亚洲精品一区中文字幕乱码 | 日韩综合| 亚洲国产精品久久久久久 | 久久久男人的天堂 | 五月天天色 | 久久美女视频 | 国户精品久久久久久久久久久不卡 | 精品久久久久久 | 精品中文在线 | 人人干人人干人人干 | 久久久久久综合 | 国产日韩一区二区三区 | 一二三区在线 |