根据Oracle文档上的描述,1467错误是由于排序的键值超过了DB_BLOCK_SIZE。 但是出现错误的SQL似乎并不满足这个条件。下面简单构造这个错误: SQL> CREATE OR REPLACE TYPE T_LINK AS OBJECT ( 2 STR VARCHAR2(30000), 3 STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER, 4 MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER, 5 MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER, 6 MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER 7 ) 8 / Type created. SQL> CREATE OR REPLACE TYPE BODY T_LINK IS 2 STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER IS 3 BEGIN 4 SCTX := T_LINK(NULL); 5 RETURN ODCICONST.SUCCESS; 6 END; 7 8 MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER IS 9 BEGIN 10 SELF.STR := SELF.STR || VALUE || ’,’; 11 RETURN ODCICONST.SUCCESS; 12 END; 13 14 MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER IS 15 BEGIN 16 RETURNVALUE := SUBSTR(SELF.STR, 1, LENGTH(SELF.STR) - 1); 17 RETURN ODCICONST.SUCCESS; 18 END; 19 20 MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER IS 21 BEGIN 22 NULL; 23 RETURN ODCICONST.SUCCESS; 24 END; 25 END; 26 / Type body created. SQL> CREATE OR REPLACE FUNCTION F_LINK(P_STR VARCHAR2) RETURN VARCHAR2 2 AGGREGATE USING T_LINK; 3 / Function created. 首先是构造自定义聚集函数,关于这个函数的详细说明,可以参考:http://yangtingkun.itpub.net/post/468/3380