Oracle中Long类型的使用与不可使用

ORA-01754 表只能包含一个LONG类型的列
alter table 表名 add 字段名 long
raw
错误原因:数据表中同时建立了LONG
RAW类型和LONG类型。
--------------------------------------------------------------------------------------------------
一、可以在以下情况使用long字段:
1、
select的list列表。
SQL> insert into test_long values
(1,‘tgfdsfgdsgfsd‘);
已创建 1 行。
SQL> insert into test_long values
(2,‘asfafafasd‘);
已创建 1 行。
SQL> commit;
提交完成。
SQL> col id for
9999;
SQL> col description for a30;
SQL> select * from
test_long;
ID DESCRIPTION
----- ------------------------------
1
tgfdsfgdsgfsd
2 asfafafasd
2、 update语句中的set子句:
SQL> update
test_long
2 set description=‘hsy‘
3 where id=2;
已更新 1 行。
SQL>
commit;
提交完成。
SQL> select * from test_long;
ID DESCRIPTION
-----
------------------------------
1 tgfdsfgdsgfsd
2 hsy
3、
insert语句中的values子句中。
SQL> insert into test_long values
(1,‘tgfdsfgdsgfsd‘);
已创建 1 行。
二、 限制使用long型字段的情况:
1、
一个表中只能使用一个long型字段。
SQL> alter table test_long add (description1
long);
alter table test_long add (description1 long)
*
ERROR 位于第 1
行:
ORA-01754: 表只能包含一个 LONG 类型的列
2、 使用long属性来定义对象type。
SQL> Create
type test_list as object(str1 varchar2(50),str2 long);
2 /
警告:
创建的类型带有编译错误。
SQL> Create type test_list as object(str1 varchar2(50),str2
number(5)) ;
2 /
类型已创建。
3、 Long字段不能出现在where子句中和完整性约束中。【除了null和not
null约束】。
4、 Long字段不能用来indexed。
5、 存储函数不能用来返回long值。
6、
在plsql程序单元中可以使用long数据类型来定义变量或者参数。但是不能从sql中调用这个程序单元。
7、
在一个单一的sql语句中,所有的long字段,updated tables和locked tables必须位于同一个数据库。
8、 Long和long
raw不能用在分布式sql语句中,不能复制。
9、如果表中同时有long和lob字段,在同一个sql语句中long和lob字段不能bind超过4000字节的数据。然而可以单独bind超多4000字节在只有long或者lob字段时。
10、
拥有long字段的表不能位于assm【自动段管理表空间】中。
三、
long字段不能出现在sql语句的部分位置:

1、 含有group by 、order by、connect
by、distinct关键字的select语句中。
2、 带有unique操作的select语句。
3、 Create
cluster语句的字段列表中。
4、 Create materialized view语句的cluster子句中。
5、
在function、expressions或contitions的内嵌sql中。
6、 含有group by子句的select列表查询中。
7、
含有union、intersect、minus的查询或者子查询中。
8、 Create table …as select语句的select
列表中。
9、 Alter table…move 语句中。
10、 Insert语句的子查询select 列表中。
四、
触发器可以用以下方式使用long字段:

1、 一个sql语句内部的trigger可以插入一个long字段。
2、
如果long字段的数据可以转换为constrained 数据类型(比如char和varchar2),此时可以引用在带有trigger的sql语句。
3、
触发器中的变量不能使用long定义。
4、
new和:old不能使用long字段。
总之:使用long字段的限制很多,使用情况很少,再加上oracle后期版本支持没有提高,所以强烈建议使用lob型来代替long型字段。

Oracle中Long类型的使用与不可使用,布布扣,bubuko.com

时间: 2024-08-06 07:55:49

Oracle中Long类型的使用与不可使用的相关文章

ORACLE 中NUMBER 类型 低精度转换成高精度

例如: 表User中有一个字段 salary  Number(10,3), 如果想把字段salary的类型提高精度到salary  Number(10,6),保留六位小数, 解决办法:1,ALTER TABEL USER MODIFY SALARY NUMBER(13,6); 解释:number类型刚开始是,长度10位,3位小数,如果想增加3位小数,对应的长度也必须增加,否则无法修改.所以NUMBER(13,6);这样就可以提高精度了, ORACLE 中NUMBER 类型 低精度转换成高精度

(转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上

原文摘自:http://heisetoufa.iteye.com/blog/504068 '模块代码 Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long Private Declare Function OleLoadPicture Lib "olepro3

Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值

感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值).经过不断查找资料和自己的试验该问题终于得到解决,下边我将自己的心得给大家做一个分享. 准备 系统环境 xp+.net2.0+oracle9i 表结构(由于是测试,表结构随便建了一

对于Oracle中Number类型的字段映射成Java中的具体类型的问题

我在Oracle中给一个用户Id字段设置为Number类型,使用JDBC在完成ORM的时候,以为其可以自动转换为Integer,因为我的POJO类id舒心实用的就是Integer.但事实是,我在测试的时候,发现所有的用户id全为null,还在奇怪明明数据库中id是有值的,为什么取不到? 原因在于Oracle的Number类型映射为Java类型中的 java.math.BigDecimal (不可变的.任意精度的有符号十进制数)类型,并不是我简单认为的 Integer ,还会报一个错误: 就是说B

Oracle中Clob类型处理解析 (转)

转:原文:http://blog.csdn.net/pojianbing/article/details/2789426 最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值).经过不断查找资料和自己的试验该问题终于得到解决,下边我将自己的心得给大家做一个分享. 准备 系统环境 xp+.net2.0+oracle9i 表结构(由于是测试

Oracle中Integer类型/DBNull的处理方法

1. 以前我一直以为 integer=number(38,0) --38是number的最大精度 integer 是个超大的数据类型,最大可以表示为power(10,126)-1 因为一个字节最大表示256,那么N个字节最大表示power(256,n)>=power(10,126) n=53,一个integer类型最少使用53个字节. 所以Integer类型还是尽量少用,一般很少用到这么大的数字.特别是某些人对于boolean类型的处理: 因为Oracle的表结构中没有布尔类型,所以很多人干脆用

ORACLE 中NUMBER类型默认的精度和Scale问题

在ORACLE数据库中,NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^-130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间.P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字.S是Scale的英文缩写,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数.有时候,我们在创建表的时候,NUMBER往往没有指定P,S的值,那么默认情况下,NUMBER的P.S的值分别是多少呢?相信这个问

Oracle中Clob类型处理解析

摘要 最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值).经过不断查找资料和自己的试验该问题终于得到解决,下边我将自己的心得给大家做一个分享. 准备 系统环境 xp+.net2.0+oracle9i   表结构(由于是测试,表结构随便建了一张) XX  字段名  类型  ID  VARCHAR2(70)  TEST  CLOB 测试

oracle中number类型的数据使用as string 得到的值为null

1,如果数据的运行时类型(和数据库字段类型相同)不是字符串类型,比如number/date等,将ds.Tables[0].Rows[i][j] 调用 as string 时,不管 这个字段是否有值,这样都会得到null. as string 只会将 运行时类型为string的对象转为字符串,如果运行时类型不是string,就会得到 null 而不报错. 2,如果从数据库中查到的数据可能为null ,就调用Convert.ToString() 类转换. 如果它不会为Null,就直接调用 .ToSt