CREATE OR REPLACE PACKAGE BODY varcharjoiner IS FUNCTION buildclobfromvarchar2cursor (mc IN cur_rec_s) RETURN CLOB IS RESULT CLOB; m_rec_s rec_s; lengthline NUMBER; BEGIN DBMS_LOB.createtemporary (RESULT, TRUE); LOOP FETCH mc INTO m_rec_s; EXIT WHEN mc%NOTFOUND; IF (NOT m_rec_s.s IS NULL) THEN lengthline := LENGTH (m_rec_s.s); DBMS_LOB.writeappend (RESULT, lengthline, m_rec_s.s); END IF; END LOOP; CLOSE mc; RETURN RESULT; END; FUNCTION buildclobfromvarchar2curproc (tt IN t) RETURN CLOB IS RESULT CLOB; lengthline NUMBER; j NUMBER; BEGIN DBMS_LOB.createtemporary (RESULT, TRUE); if (not(tt is null) and (tt.count>0)) then FOR j IN tt.FIRST .. tt.LAST LOOP IF (NOT tt (j) IS NULL) THEN lengthline := LENGTH (tt (j)); DBMS_LOB.writeappend (RESULT, lengthline, tt (j)); END IF; END LOOP; end if; RETURN RESULT; END; FUNCTION example1 RETURN CLOB IS RESULT CLOB; CURSOR c IS SELECT text FROM user_source WHERE NAME = 'MYUTILS' AND TYPE = 'PACKAGE BODY'; tt t; BEGIN OPEN c; FETCH c BULK COLLECT INTO tt; RESULT := buildclobfromvarchar2curproc (tt); CLOSE c; RETURN RESULT; END; END varcharjoiner; /