`

oracle long型

 
阅读更多

1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。

2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
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类型。(这句经ORACLE10G测试是不正确的,完全可以在PL/SQL过程块中使用LONG类型。可能某些场景还没有预到,暂时还没有发现不可用的情况。)

10、LONG类型列不能被SQL函数所改变,如:substr、instr(这个函数经测试在PL/SQL中可用,在SQL中不可用)

因为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,'dwh','work in foshan');

已创建 1 行。
SQL>; insert into testlong values(2,'sfg','work in guangzhou');

已创建 1 行。


SQL>; select * from testlong;

ID NAME
---------- ------------------------
HISTORY
--------------------------------------------------------------------------------

1 dwh
work in foshan

2 sfg
work in guangzhou

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 dwh
work in foshan

2 sfg
work in guangzhou  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类型。(这句经ORACLE10.2.1测试是不正确的,完全可以在PL/SQL过程块中使用LONG类型。可能某些场景还没有预到,暂时还没有发现不可用的情况。)
10、LONG类型列不能被SQL函数所改变,如:substr、instr(这个函数经测试在PL/SQL中可用,在SQL中不可用)

利用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);

 

 

A.Long数据类型概述 

   1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
   2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
   3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
   4、很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的。
   5、LONG 数据类型的使用中,要受限于磁盘的大小。

 

B.能够操作 LONG 的 SQL 语句:
   1、Select语句
   2、Update语句中的SET语句
   3、Insert语句中的VALUES语句

 

C.限制:
   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。


D.读写long数据类型的方法

   1.使用PreparedStatement的setCharacterStream()方法将数据存入到Long类型中

   2.使用ResultSet 的getCharacterStream()方法读取数据库中的Long类型数据

 

写入操作 注:表中trans_log为Long型

public static void setResult(Connection conn) throws SQLException{
  String sql ="insert into Acct_TRANSACTION_LOG (CONSUMER_SEQ_NO,trans_log) values(?,?)";
  PreparedStatement ps = conn.prepareStatement(sql);
  ps.setString(1, "20111111111");
  String str ="PA bank system";
  Reader re = new StringReader(str);
  ps.setCharacterStream(2, re,str.length());
  ps.executeUpdate();
 }

读取Long型操作

public static void getResult(Connection conn) throws SQLException, IOException{
  String sql ="select transac_log from Acct_TRANSACTION_LOG where CONSUMER_SEQ_NO=?";
  PreparedStatement ps = conn.prepareStatement(sql);
  ps.setString(1, "20111111111");
  ResultSet rs = ps.executeQuery();
  while(rs.next()){
   Reader re = rs.getCharacterStream(1);
   BufferedReader br = new BufferedReader(re);
   String str ="";
   while((str=br.readLine())!=null){
    System.out.println(str);
   }
  }
 }

分享到:
评论

相关推荐

    java与oracle等数据库类型对应

    第一种对应的是java中的整形 int long short byte 而第二种对应java中的 浮点型 float double oracle中的的date 对应java中的 java.util.date java.sql.date 是都可以的 但通常应用java.util.date 因为它的作用范畴...

    Oracle数据库SQL基本应用与介绍

    文字列型:CHAR、nchar、varchar2、nvarchar2、long 数值型:number、integer、float、int等。 日期型、期间型:date、timestamp、timestamp with time zone等。 Oracle数据库对象:cluster、数据库联接、触发器、...

    pb写的从oracle库中读取和保存图片

    pb写的从oracle库中读取和保存图片,并另存为文件

    Oracle SQL Handler (Oracle客户端工具) V3.1

    本工具是用 Java 开发的、专门用于 Oracle 数据库操作的一种图形界面工具: 多线程、多连接、支持 PL/SQL、功能实用、操作简便,能运行于所有平台包括 Windows、Linux 及 Unix,勿需安装 Oracle 客户端,仅 2.8 MB ...

    一个oracle客户端(oracle sql handler)

    能方便地查看、编辑大型的文本字段(如 CLOB、 LONG) o 智能的SQL编辑器:自动弹出提示窗口,列出关键字、函数名、列名、对象名、对象类型、参数、包内的过程和函数,提高SQL编辑效率。例如: (1)输入字串...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...

    ORACLE中的数据类型.doc

    LONG LONG 数据类型是一个遗留下来的而且在将来不会被支持的数据类型。它将被LOB(Large Object)数据类型所代替。 比较规则 Varchar2和char数据类型根据尾部的空格有不同的比较规则。对Char型数据,尾部的空格将被...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    震撼推出超方便实用的Oracle开发工具 - Oracle SQL Handler,双语界面,智能SQL编辑器,免装Oracle客户端,能运行于Windows, 双语界面

    能方便地查看/编辑大型的文本字段(如 CLOB、 LONG) 智能的SQL编辑器:自动弹出提示窗口,列出关键字、关键字组合、函数名、列名、对象名、对象类型、参数 、包内的过程和函数,提高SQL编辑效率。例如: (1)...

    北大青鸟Oracle教程集1

    Oracle主要 Oracle主要 数据类型 4-1 Character 数据类型 Number 数据类型 Date 数据类型 Raw 和 Long Raw 数据类型 LOB 数据类型 Oracle 主要数据类型 4-2 Character 数据类型 ― Char ― Varchar2 ― Long Number ...

    北大青鸟Oracle教程集2

    Oracle主要 Oracle主要 数据类型 4-1 Character 数据类型 Number 数据类型 Date 数据类型 Raw 和 Long Raw 数据类型 LOB 数据类型 Oracle 主要数据类型 4-2 Character 数据类型 ― Char ― Varchar2 ― Long Number ...

    Oracle开发工具 - Oracle SQL Handler(功能强大,超方便好用, 免装客户端, Windows / Linux)

    运行语句 “desc [user.]objectName[@dbLink]” 或 Ctrl+鼠标点击字串“[user.] objectName[@dbLink]”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类 型及长度、默认值、非空)、索引、约束条件...

    ORACLE数据库sql语言 、函数及常用命令

    LONG RAM:超长大型数据(照片、图形、描述等不定长数据)。 DATE:包含日期和时间。 INTEGER:有符号全长二进制整数(31位精度)。 SMALLINT:有符号半长二进制整数(15位精度)。 DECIMAL (p[,q]): 有符号的封装...

    ORACLE常用SQL命令.pdf

    命令行工具基本操作及 SQL 命令 1. 基本概念 1.1.数据类型 基本数据类型(NUMBER,VARCHAR2,DATE) O RACEL 支持下列内部...LONG 变长字符数据,最长为 2G 字节。 DATE 日期型。 RAW 二进制数据,最长为 255 字节。

    orcale常用命令

    要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>sqlplus SQL>connect internal SQL>startup SQL>quit b、关闭ORACLE系统 oracle>sqlplus SQL>connect internal ...

    PL/SQL 基础.doc

    LONG 一般CHAR VARCHAR2就够了 CHAR 定长(例子:CHAR(5) 如果不够5个字符的话就会用空白填充 ) ,可以不带长度规定(默认为1) VARCHAR2 变长((VARCHAR2(5)标识最长可以保存5个字符) 后面的长度规定必须要有 布尔...

    SQL性能优化

    OTHER LONG )  Syntax 说明: explain plan set statement_id = user_define for select ... 将结果显示 SELECT LPAD(' ', 2 *(LEVEL - 1)) || operation op, options, object_name, POSITION FROM plan_table...

    整理后java开发全套达内学习笔记(含练习)

    export ORACLE_HOME=/oracledata/.../bin: BufferedReader建构时接受java.io.Reader物件 可使用java.io.InputStreamReader 例: import java.io.InputStreamReader; import java.io.BufferedReader; class n{ ...

    实验六-触发器实验报告.doc

    理解Oracle触发器的种类和用途 2. 掌握行级触发器的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名>...

Global site tag (gtag.js) - Google Analytics