Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / System Packages
 

Dump Column long with DBMS_SQL DEFINE_COLUMN_LONG

SQL> SQL> CREATE OR REPLACE PROCEDURE dump_long(tab IN VARCHAR2,col IN VARCHAR2, whr IN VARCHAR2 := NULL, pieces IN OUT DBMS_SQL.VARCHAR2S)   2  IS   3     cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;   4     returnValue PLS_INTEGER;   5   6     TYPE long_rectype IS RECORD (   7        piece_len PLS_INTEGER DEFAULT 2000,   8        pos_in_long PLS_INTEGER DEFAULT 0,   9        one_piece VARCHAR2(2000),  10        one_piece_len PLS_INTEGER  11        );  12  13     rec long_rectype;  14  BEGIN  15     DBMS_SQL.PARSE (cur,'SELECT ' || col || '  FROM ' || tab ||' WHERE ' || NVL (whr, '1 = 1'),DBMS_SQL.NATIVE);  16  17     DBMS_SQL.DEFINE_COLUMN_LONG (cur, 1);  18  19     returnValue := DBMS_SQL.EXECUTE_AND_FETCH (cur);  20  21     IF returnValue > 0  22     THEN  23        LOOP  24           DBMS_SQL.COLUMN_VALUE_LONG(cur,1,rec.piece_len,rec.pos_in_long,rec.one_piece,rec.one_piece_len);  25           EXIT WHEN rec.one_piece_len = 0;  26           pieces (NVL (pieces.LAST, 0) + 1) := rec.one_piece;  27           rec.pos_in_long := rec.pos_in_long + rec.one_piece_len;  28        END LOOP;  29     END IF;  30     DBMS_SQL.CLOSE_CURSOR (cur);  31  END;  32  / Procedure created.