在使用自定义聚集函数时出现了一个ORA-1467错误。  
根据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
 
								 
									
相关文章
									
oms实现Oracle的数据备份方法
Oracle9i的1467错误解决方法
随机抽取记录的方法代码
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛