您的位置: 首页 计算机类> Oracle认证> 应用技术
Oracle认证应用技术,oracle dba认证,oracle题库,oracle考试试题
公务员考试辅导课程

Oracle9i的1467错误解决方法

发布时间:11-09

页 数:4页

上一篇:细化解析:教你轻松掌握Oracle内存结构

下一篇:oms实现Oracle的数据备份方法




SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS; 
Table created. 
SQL> SELECT OWNER, F_LINK(OBJECT_NAME), F_LINK(SUBOBJECT_NAME), F_LINK(OBJECT_ID) 
2 FROM T 
3 GROUP BY OWNER; 
SELECT OWNER, F_LINK(OBJECT_NAME), F_LINK(SUBOBJECT_NAME), F_LINK(OBJECT_ID) 

ERROR at line 1: 
ORA-01467: sort key too long 
SQL> DESC T 
Name Null? Type 
--------------------------------- -------- -------------- 
OWNER VARCHAR2(30) 
OBJECT_NAME VARCHAR2(128) 
SUBOBJECT_NAME VARCHAR2(30) 
OBJECT_ID NUMBER 
DATA_OBJECT_ID NUMBER 
OBJECT_TYPE VARCHAR2(18) 
CREATED DATE 
LAST_DDL_TIME DATE 
TIMESTAMP VARCHAR2(19) 
STATUS VARCHAR2(7) 
TEMPORARY VARCHAR2(1) 
GENERATED VARCHAR2(1) 
SECONDARY VARCHAR2(1) 
OWNER列的长度只有30,而且即使换成长度为1的列也没有作用。 
SQL> SELECT TEMPORARY, F_LINK(OBJECT_NAME), F_LINK(SUBOBJECT_NAME), F_LINK(OBJECT_ID) 
2 FROM T 
3 GROUP BY TEMPORARY; 
SELECT TEMPORARY, F_LINK(OBJECT_NAME), F_LINK(SUBOBJECT_NAME), F_LINK(OBJECT_ID) 

ERROR at line 1: 
ORA-01467: sort key too long 
既然和GROUP BY列没有太大的关系,那么是否与F_LINK输入列的长度有关: 
SQL> SELECT OWNER, F_LINK(1), F_LINK(2), F_LINK(3) 
2 FROM T 
3 GROUP BY OWNER; 
SELECT OWNER, F_LINK(1), F_LINK(2), F_LINK(3) 

ERROR at line 1: 
ORA-01467: sort key too long 
即使将F_LINK的输入参数变成常数1、2、3,问题仍然会出现,看来和F_LINK输入参数的长度也没有关系。 
虽然与F_LINK输入参数长度没有关系,但是和F_LINK函数调用次数有关,将F_LINK三次调用变为两次调用,就可以得到结果: 
SQL> SELECT OWNER, F_LINK(1), F_LINK(2) 
2 FROM T 
3 WHERE ROWNUM < 10 
4 GROUP BY OWNER; 
OWNER F_LINK(1) F_LINK(2) 
------------------------------ ------------------------------ ----------------- 
SYS 1,1,1,1,1,1,1,1,1 2,2,2,2,2,2,2,2,2 
这个问题在9i上就会出现,而且与DB_BLOCK_SIZE的大小没有关系。在DB_BLOCK_SIZE为8K和16K的环境下测试,得到的结果完全一样。 
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS; 
Table created. 
SQL> SELECT OWNER, F_LINK(1), F_LINK(2), F_LINK(3) 

Google
 


     

考试信息

热点

课程

更新

©2005-2006 100ksw.com 版权所有 皖ICP备06013378号