日期:2014-05-17  浏览次数:20752 次

关于long数据类型字段的问题,请各位看看
表结构如下
字段1:number    
字段2:char    
字段3:long型    
……    

在表中加入一条记录:    

正确插入后,删除却出现如下问题……提示“ORA-00997:     非法使用     LONG     数据类型”    
是否LONG型数据有这种限制:即     LONG型数据不能在delete操作中用作约束条件??在线等候,万分感谢……    
另外:只要不附加“     and     COL3     =     10”这个约束条件就可以正确执行    
 
 
SQL>     insert     into     TEST.TESTTBL1     values(100, 'a ',10);    
 
已创建     1     行。    
 
SQL>   delete   TEST.TESTTBL1   where   COL1   =   100   and   COL2   =   'a '   and   COL3   =   10;    
delete   TEST.TESTTBL1   where   COL1   =   100   and   COL2     =   'a '   and   COL3     =     10    
                                                                                                                                                                                                                                  *    
ERROR     位于第     1     行:    
ORA-00997:     非法使用   LONG   数据类型    
 
 
SQL>  

请问如果我表中只有一个long字段,且有多条记录,我要删除其中的一条记录,那不是实现不了么……???如何解决这样的问题??

------解决方案--------------------
LONG类型列不能用在Select的以下子句中:where、group by、order by,以及带有distinct的select语句中。



------解决方案--------------------
可以通过全文索引解决这个问题
create table t (cid int,clong long );
insert into t values( 1,1 );
insert into t values( 1,2 );
--创建全文索引
CREATE INDEX IDX_CLONG ON T(clong) INDEXTYPE IS CTXSYS.CONTEXT;
--执行查询
SELECT cID FROM t WHERE CONTAINS(clong, '1 ') > 0;
--查询结果
cid
1
--这样就可以根据这个查询结果对象要删除的记录进行删除
------解决方案--------------------
学习
------解决方案--------------------
关注这个问题。long有很多的限制,是不是在oracle中,用clob代替更好?或有更好的办法?
如果可用clob代替?不知道会不会很占存储空间?