- 浏览: 210540 次
- 性别:
- 来自: 广州
文章分类
最新评论
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 的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);
}
}
}
发表评论
-
(转)Oraclepl/sql中实现continue的方法
2013-10-21 11:36 1056转自:http://blog.csdn.net/wzy06 ... -
用pl/sql developer导出表结构和数据
2013-08-08 15:12 695转自:http://blog.csdn.net/ ... -
Oracle 中like效率 正则表达式 浅析
2013-07-19 11:47 915转自:http://blog.csdn.net/songde ... -
ORACLE EXPDP命令使用详细
2013-07-17 15:52 644转自:http://blog.csdn.net/zftang ... -
Oracle11g使用exp导出空表
2013-07-17 15:50 970转自:http://www.cnblogs.co ... -
oracle 汉字转拼音函数
2013-07-02 15:31 2953oracle 汉字转拼音函数 google 转自:ht ... -
(转)oracle恢复误删除数据,解除锁定的等sql语句
2013-05-03 15:20 1108注意:数据库版本是10g,不过大部分9i的也适用,闪回9i就 ... -
(转)oracle wm_concat(column)函数的使用
2013-05-03 15:17 655oracle wm_concat(column)函数的使用 ... -
(转)Oracle 10g如何对用户姓名,按首字母排序、查询
2013-05-03 15:16 868http://zheng12tian.iteye.com/b ... -
(转)oracle.for update,更新游标,cursor
2013-05-03 13:10 4035http://blog.csdn.net/yanleigis ... -
(转)oracle for update和for update nowait的区别
2013-05-03 11:29 764转自:http://www.cnblogs.com/quan ... -
(转)Oracle存储过程异常处理事务特性分析
2013-04-27 23:08 702Oracle存储过程中的事务是如何处理的?通常情况下。整个 ... -
(转)oracle 存储过程事务使用断点回滚 ---savepoint
2013-04-27 21:25 3702学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题 ... -
(转)oracle存储过程的事务处理及事务使用断点回滚
2013-04-27 21:01 11791、事务用于确保数据的一致性,由一组相关的DML语句组成,该 ... -
Oracle 修改字段类型
2013-03-22 11:24 8021,如果只是单纯的把字段改大,比如numeric (16,2 ... -
(转)在Oracle 数据库中的临时表用法汇总
2013-03-07 10:04 16381 语法 在Oracle中,可以创建以下两种临时表 ... -
(转)PL/SQL Developer 使用笔记
2013-03-06 11:34 796PL/SQL Developer 使用笔记 版本: ... -
(转)Oracle 临时表的应用
2013-03-06 11:14 793http://hi.baidu.com/edeed/item ... -
(转)Oracle临时表使用注意事项
2013-03-06 11:04 1301http://space.itpub.net/519536/ ... -
(转)decode中null相等
2013-03-06 11:02 871SQL> select decode(null,nul ...
相关推荐
第一种对应的是java中的整形 int long short byte 而第二种对应java中的 浮点型 float double oracle中的的date 对应java中的 java.util.date java.sql.date 是都可以的 但通常应用java.util.date 因为它的作用范畴...
文字列型:CHAR、nchar、varchar2、nvarchar2、long 数值型:number、integer、float、int等。 日期型、期间型:date、timestamp、timestamp with time zone等。 Oracle数据库对象:cluster、数据库联接、触发器、...
pb写的从oracle库中读取和保存图片,并另存为文件
本工具是用 Java 开发的、专门用于 Oracle 数据库操作的一种图形界面工具: 多线程、多连接、支持 PL/SQL、功能实用、操作简便,能运行于所有平台包括 Windows、Linux 及 Unix,勿需安装 Oracle 客户端,仅 2.8 MB ...
能方便地查看、编辑大型的文本字段(如 CLOB、 LONG) o 智能的SQL编辑器:自动弹出提示窗口,列出关键字、函数名、列名、对象名、对象类型、参数、包内的过程和函数,提高SQL编辑效率。例如: (1)输入字串...
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
LONG LONG 数据类型是一个遗留下来的而且在将来不会被支持的数据类型。它将被LOB(Large Object)数据类型所代替。 比较规则 Varchar2和char数据类型根据尾部的空格有不同的比较规则。对Char型数据,尾部的空格将被...
其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...
能方便地查看/编辑大型的文本字段(如 CLOB、 LONG) 智能的SQL编辑器:自动弹出提示窗口,列出关键字、关键字组合、函数名、列名、对象名、对象类型、参数 、包内的过程和函数,提高SQL编辑效率。例如: (1)...
Oracle主要 Oracle主要 数据类型 4-1 Character 数据类型 Number 数据类型 Date 数据类型 Raw 和 Long Raw 数据类型 LOB 数据类型 Oracle 主要数据类型 4-2 Character 数据类型 ― Char ― Varchar2 ― Long Number ...
Oracle主要 Oracle主要 数据类型 4-1 Character 数据类型 Number 数据类型 Date 数据类型 Raw 和 Long Raw 数据类型 LOB 数据类型 Oracle 主要数据类型 4-2 Character 数据类型 ― Char ― Varchar2 ― Long Number ...
运行语句 “desc [user.]objectName[@dbLink]” 或 Ctrl+鼠标点击字串“[user.] objectName[@dbLink]”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类 型及长度、默认值、非空)、索引、约束条件...
LONG RAM:超长大型数据(照片、图形、描述等不定长数据)。 DATE:包含日期和时间。 INTEGER:有符号全长二进制整数(31位精度)。 SMALLINT:有符号半长二进制整数(15位精度)。 DECIMAL (p[,q]): 有符号的封装...
命令行工具基本操作及 SQL 命令 1. 基本概念 1.1.数据类型 基本数据类型(NUMBER,VARCHAR2,DATE) O RACEL 支持下列内部...LONG 变长字符数据,最长为 2G 字节。 DATE 日期型。 RAW 二进制数据,最长为 255 字节。
要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>sqlplus SQL>connect internal SQL>startup SQL>quit b、关闭ORACLE系统 oracle>sqlplus SQL>connect internal ...
LONG 一般CHAR VARCHAR2就够了 CHAR 定长(例子:CHAR(5) 如果不够5个字符的话就会用空白填充 ) ,可以不带长度规定(默认为1) VARCHAR2 变长((VARCHAR2(5)标识最长可以保存5个字符) 后面的长度规定必须要有 布尔...
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...
export ORACLE_HOME=/oracledata/.../bin: BufferedReader建构时接受java.io.Reader物件 可使用java.io.InputStreamReader 例: import java.io.InputStreamReader; import java.io.BufferedReader; class n{ ...
理解Oracle触发器的种类和用途 2. 掌握行级触发器的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名>...