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 列表中。
sql触发器的使用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型字段。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论