程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle的long類型字段的應用

oracle的long類型字段的應用

編輯:Oracle數據庫基礎

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。

因為long類型的數值不能用insert into … select的方法插入,故我們要分兩步走,先插入其它字段,最後再插入long類型字段,這可以通過過程來實現.下面是一個我做實驗實現的例子.

SQL>; create table testlong (id number,name varchar2(12),history long);

表已創建。

SQL>; create table testlong1 (id number,name varchar2(12),history long);

表已創建。

SQL>; insert into testlong values(1,’tslxg’,'work in tangshan’);

已創建 1 行。
SQL>; insert into testlong values(2,’imakee’,'work in beiing’);

已創建 1 行。

SQL>; select * from testlong;

ID NAME
———- ————————
HISTORY
——————————————————————————–

1 tslxg
work in tangshan

2 imakee
work in beijing

SQL>; insert into testlong1 select * from testlong;
insert into testlong1 select * from testlong
*
ERROR 位於第 1 行:
ORA-00997: 非法使用 LONG 數據類型

SQL>; Declare
2 CURSOR bcur
3 IS SELECT id,history from testlong;
4 brec bcur%ROWTYPE;
5 BEGIN
6 insert into testlong1(id,name) select id,name from testlong;–其它類型
先插入
7 OPEN bcur;
8 LOOP
9 FETCH bcur INTO brec;
10 EXIT WHEN bcur%NOTFOUND;
11 update testlong1 set history=brec.history where id=brec.id;
12 END LOOP;
13 CLOSE bcur;
14 END;
15 /

PL/SQL 過程已成功完成。

SQL>; select * from testlong1;

ID NAME
———- ————————
HISTORY
————————————————————————–

1 tslxg
work in tangshan

2 imakee
work in beijing

LONG列不能出現在SQL語句的某些部分:
1、在WHERE、GROUP BY、ORDER BY、CONNECT BY子句以及在具有DISTINCT 操作的SELECT語句中。
2、SQL函數(如SUBSTR或INSTR)
3、表達式或條件。
4、包含有GROUP BY子句的查詢的選擇表。
5、在子查詢的選擇表或由集合操作組合查詢選擇表。
6、CREATE TABLE AS SELECT語句的選擇表。

使用說明:

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。

利用Oracle long類型字段,插入大文本

在編寫應用時,需要大量的插入大文本,但是oracle 的clob操作起來比較繁瑣,應此我沒有選擇使用clob,而是使用了Oracle以前版本中的long類型[但是long類型有一些限制,在一個表中只能有一個long字段]。

開始的時候我直接使用insert into table1 values(a,b[long])的方式插入數據庫,但是Oracle有些限制一條語句不能超過4000個字符,並報ORA-01704的錯誤。

經過查找Oracle 的文檔找到了解決的方法,就是對於long的字段使用setCharacterStream()方法將String插入數據庫。

代碼:
sql=”insert into msg_info values (?,?,?,?[long類型字段],’C',sysdate,sysdate+”+msgterm+”,?)”;
pstat1 = conn.prepareStatement(sql);
pstat1.setLong(1, msg_id);
pstat1.setInt(2, msg_gp_id);
pstat1.setString(3, msg_title);
pstat1.setCharacterStream(4,new StringReader(msg_info.toString()),msg_info.length());
conn.commit();
pstat1.setLong(5, this.upid);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved