LONG型別遷移到LOB型別(二)
LONG型別由於過多的限制,Oracle很早就推薦使用LOB型別進行替代,在Oracle的官方文件中給出了幾種將LONG型別遷移到LOB型別的方法,這裡簡單討論一下。
這一篇討論ALTER TABLE語句。
LONG型別遷移到LOB型別(一):http://yangtingkun.itpub.net/post/468/501065
Oracle的ALTER TABLE語句其實可以直接修改:
SQL> CREATE TABLE T
2 (ID NUMBER,
3 CONTENTS LONG);
Table created.
SQL> INSERT INTO T
2 SELECT ROWNUM, OWNER || OBJECT_NAME || OBJECT_TYPE
3 FROM ALL_OBJECTS;
75327 rows created.
SQL> COMMIT;
Commit complete.
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;
Table altered.
看上去似乎很簡單,不過Oracle並不是簡單的將列的定義換成CLOB,而是生成了一個臨時列,將資料儲存,然後刪除原LONG列,其實操作類似上一篇文章最後給出的步驟,不過Oracle進行了封裝,因此效率更高,不需要透過關聯來實現了。
SQL> DROP TABLE T PURGE;
Table dropped.
SQL> CREATE TABLE T
2 (ID NUMBER,
3 CONTENTS LONG);
Table created.
SQL> INSERT INTO T
2 SELECT ROWNUM, OWNER || OBJECT_NAME || OBJECT_TYPE
3 FROM ALL_OBJECTS;
75327 rows created.
SQL> COMMIT;
Commit complete.
SQL> SET TIMING ON
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;
Table altered.
Elapsed: 00:00:00.65
SQL> SET TIMING OFF
SQL> DROP TABLE T PURGE;
Table dropped.
SQL> CREATE TABLE T
2 (ID NUMBER,
3 CONTENTS LONG);
Table created.
SQL> INSERT INTO T
2 SELECT ROWNUM, OWNER || OBJECT_NAME || OBJECT_TYPE
3 FROM ALL_OBJECTS, USER_DB_LINKS;
527289 rows created.
SQL> COMMIT;
Commit complete.
SQL> SET TIMING ON
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;
Table altered.
Elapsed: 00:00:04.49
SQL> SET TIMING OFF
SQL> DROP TABLE T PURGE;
Table dropped.
SQL> CREATE TABLE T
2 (ID NUMBER,
3 CONTENTS LONG);
Table created.
SQL> INSERT INTO T
2 SELECT ROWNUM, OWNER || OBJECT_NAME || OBJECT_TYPE
3 FROM ALL_OBJECTS, USER_DB_LINKS, USER_DB_LINKS;
3691023 rows created.
SQL> COMMIT;
Commit complete.
SQL> SET TIMING ON
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;
Table altered.
Elapsed: 00:00:37.10
可以看到,隨著資料量的增加,ALTER TABLE所花費的時間也線性增長,說明這個操作並不是簡單的修改資料字典,而是對資料進行轉換。
不過這個操作的效率比第一種方法要高不少,對於7*24要求不是非常高的絕大多數系統都是滿足要求的,畢竟一個SQL就可以完成轉換還是非常方便的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-665535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jenkins:批次自動將 Maven 型別 Job 遷移到自由風格型別JenkinsMaven型別
- [20190531]lob型別pctversion 和 retention.txt型別
- Spring Mvc Long型別精度丟失SpringMVC型別
- long資料型別跨平臺問題資料型別
- 測試Java中的long,int基本型別Java型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- c++ 基本資料型別(int、float、double、long、long long)最大值,最小是表示方法C++資料型別
- 二、ClickHouse 資料型別資料型別
- 33 個 JavaScript 核心概念系列(二): 值型別與引用型別JavaScript型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 值型別和引用型別型別
- 第11章 使用類——型別轉換(二)將自定義型別轉換為內建型別型別
- js基本型別和引用型別區別JS型別
- 值型別與引用型別的區別型別
- typeScript 型別斷言、聯合型別和交叉型別(七)TypeScript型別
- postgreSQL 索引(二)型別介紹SQL索引型別
- JavaScript值型別和引用型別JavaScript型別
- ECMAScript 原始型別與引用型別型別
- 資料型別,型別轉換資料型別
- c#:值型別&引用型別C#型別
- 型別預設和any型別型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- Java中Switch支援String字串?為什麼不支援long型別?Java字串型別
- Long型別框架自動序列化成String失效問題排查型別框架
- TypeScript 泛型型別TypeScript泛型型別
- 型別 VS 泛型型別泛型
- JavaScript - 基本型別與引用型別值JavaScript型別
- BigDecimal轉為String型別、int型別Decimal型別
- 基本資料型別與字串型別資料型別字串
- Java的基本型別和引用型別Java型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- c#中值型別和引用型別的區別C#型別
- 二、變數與資料型別變數資料型別
- TypeScript 簡明教程:基本型別(二)TypeScript型別
- python基礎(二)—-資料型別Python資料型別
- TypeScript筆記(二)高階型別TypeScript筆記型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別