[code] SQL> create or replace TYPE "CONCAT_EXPR" AS OBJECT ( 2 str VARCHAR2 (4000), 3 del VARCHAR2 (4000), 4 MAP MEMBER FUNCTION f_map RETURN VARCHAR2); 5 / Type created. SQL> show error No errors. SQL> create or replace TYPE BODY concat_expr AS 2 MAP MEMBER FUNCTION f_map 3 RETURN VARCHAR2 4 IS 5 BEGIN 6 RETURN str; 7 END f_map; 8 END; 9 / Type body created. SQL> SQL> show error No errors. SQL> create or replace TYPE "concat_all_ot" AS OBJECT ( 2 str VARCHAR2 (4000), 3 del VARCHAR2 (4000), 4 5 STATIC FUNCTION odciaggregateinitialize ( 6 sctx IN OUT concat_all_ot) 7 RETURN NUMBER, 8 9 MEMBER FUNCTION odciaggregateiterate ( 10 SELF IN OUT concat_all_ot, 11 ctx IN concat_expr) 12 RETURN NUMBER, 13 14 MEMBER FUNCTION odciaggregateterminate ( 15 SELF IN concat_all_ot, 16 returnvalue OUT VARCHAR2, 17 flags IN NUMBER) 18 RETURN NUMBER, 19 20 MEMBER FUNCTION odciaggregatemerge ( 21 SELF IN OUT concat_all_ot, 22 ctx2 concat_all_ot) 23 RETURN NUMBER); 24 / Warning: Type created with compilation errors. SQL> SQL> show error No errors. SQL> create or replace TYPE BODY concat_all_ot 2 AS 3 STATIC FUNCTION odciaggregateinitialize ( 4 sctx IN OUT concat_all_ot) 5 RETURN NUMBER 6 IS 7 BEGIN 8 sctx := concat_all_ot (NULL, NULL); 9 RETURN odciconst.success; 10 END; 11 MEMBER FUNCTION odciaggregateiterate ( 12 SELF IN OUT concat_all_ot, 13 ctx IN concat_expr) 14 RETURN NUMBER 15 IS 16 BEGIN 17 IF SELF.str IS NOT NULL THEN 18 SELF.str := SELF.str || ctx.del; 19 END IF; 20 SELF.str := SELF.str || ctx.str; 21 RETURN odciconst.success; 22 END; 23 24 MEMBER FUNCTION odciaggregateterminate ( 25 SELF IN concat_all_ot, 26 returnvalue OUT VARCHAR2, 27 flags IN NUMBER) 28 RETURN NUMBER 29 IS 30 BEGIN 31 returnvalue := SELF.str; 32 RETURN odciconst.success; 33 END; 34 35 MEMBER FUNCTION odciaggregatemerge ( 36 SELF IN OUT concat_all_ot, 37 ctx2 IN concat_all_ot) 38 RETURN NUMBER 39 IS 40 BEGIN 41 IF SELF.str IS NOT NULL THEN 42 SELF.str := SELF.str || SELF.del; 43 END IF; 44 SELF.str := SELF.str || ctx2.str; 45 RETURN odciconst.success; 46 END; 47 END; 48 / Warning: Type Body created with compilation errors. SQL> SQL> SQL> show error Errors for TYPE BODY CONCAT_ALL_OT: LINE/COL ERROR -------- ----------------------------------------------------------------- 0/0 PL/SQL: Compilation unit analysis terminated 1/11 PLS-00201: identifier 'CONCAT_ALL_OT' must be declared 1/11 PLS-00304: cannot compile body of 'CONCAT_ALL_OT' without its specification SQL> create or replace FUNCTION concat_all ( 2 ctx IN concat_expr) 3 RETURN VARCHAR2 DETERMINISTIC PARALLEL_ENABLE 4 AGGREGATE USING concat_all_ot; 5 / Warning: Function created with compilation errors. SQL> SQL> show error Errors for FUNCTION CONCAT_ALL: LINE/COL ERROR -------- ----------------------------------------------------------------- 0/0 PL/SQL: Compilation unit analysis terminated 4/19 PLS-00201: identifier 'CONCAT_ALL_OT' must be declared SQL> [/code]