long型別轉換成varchar2
long型別有很多限制,多得不得多,幾乎沒法用。公司有一個表之前定義成long了,現在要改過來。
在網上找到了一個方法:
[@more@]1、LONG 資料型別中儲存的是可變長字串,最大長度限制是2GB。
2、對於超出一定長度的文字,基本只能用LONG型別來儲存,資料字典中很多物件的定義就是用LONG來儲存的。
3、LONG型別主要用於不需要作字串搜尋的長串資料,如果要進行字元搜尋就要用varchar2型別。
4、很多工具,包括SQL*Plus,處理LONG 資料型別都是很困難的。
5、LONG 資料型別的使用中,要受限於磁碟的大小。
能夠操作 LONG 的 SQL 語句:
1、Select語句
2、Update語句中的SET語句
3、Insert語句中的VALUES語句
限制:
1、一個表中只能包含一個 LONG 型別的列。
2、不能索引LONG型別列。
3、不能將含有LONG型別列的表作聚簇。
4、不能在SQL*Plus中將LONG型別列的數值插入到另一個表格中,如insert into …select。
5、不能在SQL*Plus中透過查詢其他表的方式來建立LONG型別列,如create table as select。
6、不能對LONG型別列加約束條件(NULL、NOT NULL、DEFAULT除外),如:關鍵字列(PRIMARY KEY)不能是 LONG 資料型別。
7、LONG型別列不能用在Select的以下子句中:where、group by、order by,以及帶有distinct的select語句中。
8、LONG型別列不能用於分佈查詢。
9、PL/SQL過程塊的變數不能定義為LONG型別。
10、LONG型別列不能被SQL函式所改變,如:substr、instr。
轉換步驟:
1:建立jivemsg2表:
CREATE TABLE "JIVEMSG2"
( "URI" VARCHAR2(100 BYTE) DEFAULT '' NOT NULL ENABLE,
"SENDER" VARCHAR2(100 BYTE) DEFAULT '',
"RECEIVER" VARCHAR2(100 BYTE) DEFAULT '',
"CREATIONDATE" VARCHAR2(15 BYTE) DEFAULT '',
"MESSAGETYPE" VARCHAR2(100 BYTE) DEFAULT '',
"MESSAGESIZE" NUMBER(*,0) DEFAULT 0,
"MESSAGE" LONG,
"FKDOMAIN" VARCHAR2(20 BYTE) DEFAULT NULL,
"VERSION" VARCHAR2(20 BYTE) DEFAULT NULL,
"FLAGS" VARCHAR2(20 BYTE) DEFAULT NULL,
"RECEIVERNAME" VARCHAR2(50 BYTE) DEFAULT NULL,
"SENDERNAME" VARCHAR2(50 BYTE) DEFAULT NULL,
CONSTRAINT "JIVEMSG2_PK" PRIMARY KEY ("URI")
);
2:修改表jivemsg2的型別
ALTER TABLE JIVEMSG2 MODIFY ("MESSAGE" VARCHAR2(4000 CHAR));
3:將表jivemsg中的資料匯入到表jivemsg2中
這步是關鍵,由於long型別不能直接轉換成varchar2。
所以這邊用了一個別人寫的function來解決。
INSERT INTO JIVEMSG2 select uri,sender,receiver,creationdate,messagetype,messagesize, long_to_char(rowid,'ucstar6','jivemsg','message'),fkdomain,version,flags,receivername,sendername from jivemsg msg;
函式:
/* 其中in_rowid為行id,in_owner為資料庫登陸的帳號名,in_table_name為資料庫表名,in_column為資料庫對應long型別的表欄位名稱 */
CREATE OR REPLACE FUNCTION LONG_TO_CHAR( in_rowid rowid,in_owner
varchar,in_table_name varchar,in_column varchar2)
RETURN varchar AS
text_c1 varchar2(32767);
sql_cur varchar2(2000);
--
begin
sql_cur := 'select '||in_column||' from
'||in_owner||'.'||in_table_name||' where rowid =
'||chr(39)||in_rowid||chr(39);
dbms_output.put_line (sql_cur);
execute immediate sql_cur into text_c1;
text_c1 := substr(text_c1, 1, 4000);
RETURN TEXT_C1;
END;
/
4:刪除表jivemsg,並將jivemsg2更名為jivemsg
DROP TABLE jivemsg;
RENAME JIVEMSG2 TO jivemsg;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1059094/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- long查詢結果轉換為varchar2型別型別
- long2varchar 把long轉換為varchar2
- Oracle Long型別轉換為Clob型別Oracle型別
- 關於long型別的轉換型別
- Oracle long轉為varchar2Oracle
- 字元型別轉換成時間型別字元型別
- 將字串轉換成Bitmap型別 或者 將Bitmap轉換成字串字串型別
- 如何將varchar2修改為clob型別欄位(使用long過渡)型別
- ABAP中Char型別資料轉換成Decimal型別型別Decimal
- Java long型別和Long型別的那些事Java型別
- 利用符號進行的型別轉換,轉換成數字型別 ~~符號型別
- PHP 型別轉換&&型別強制轉換PHP型別
- 操作LONG型別型別
- DBA_TAB_PARTITIONS中 high_value欄位long型轉varchar2
- Double型別轉換成BigDicimal問題型別
- java型別轉換與強制型別轉換(轉)Java型別
- Python 四種數值型別(int,long,float,complex)區別及轉換Python型別
- Long raw和Long型別總結型別
- 型別轉換型別
- ORACLE 檢視 LONG VARCHAR2Oracle
- LONG型別複製型別
- long型別相關型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 資料型別,型別轉換資料型別
- LONG型別遷移到LOB型別(三)型別
- LONG型別遷移到LOB型別(二)型別
- LONG型別遷移到LOB型別(一)型別
- int型別和long long型別運算執行時間的差別型別
- byte位元組陣列 轉換成double型別陣列型別
- js型別轉換JS型別
- 字元型別轉換字元型別
- 3.2 型別轉換型別
- JavaScript 型別轉換JavaScript型別
- Golang型別轉換Golang型別
- 型別轉換(cast)型別AST
- C++中的向上型別轉換和向下型別轉換C++型別
- JSON序列化時將BigDecimal型別轉換成String型別JSONDecimal型別
- Java資料型別及型別轉換Java資料型別