1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
   |    PROCEDURE setlongbeitext (p_query VARCHAR2, beinr VARCHAR2)
   IS
      l_cursor     INTEGER        DEFAULT DBMS_SQL.open_cursor;
      l_n          NUMBER;
      l_long_val   VARCHAR2 (250);
      l_long_len   NUMBER;
      l_buflen     NUMBER         := 250;
      l_curpos     NUMBER         := 0;
      RESULT       LONG;
   BEGIN
      DBMS_SQL.parse (l_cursor, p_query, DBMS_SQL.native);
      --dbms_sql.bind_variable( l_cursor, p_name, p_value );
      DBMS_SQL.define_column_long (l_cursor, 1);
      l_n := DBMS_SQL.EXECUTE (l_cursor);
 
      IF (DBMS_SQL.fetch_rows (l_cursor) > 0)
      THEN
         LOOP
            DBMS_SQL.column_value_long (l_cursor,
                                        1,
                                        l_buflen,
                                        l_curpos,
                                        l_long_val,
                                        l_long_len
                                       );
            l_curpos := l_curpos + l_long_len;
 
            IF l_curpos + l_buflen > 32999
            THEN
               l_buflen := 32999 - l_curpos;
               DBMS_SQL.column_value_long (l_cursor,
                                           1,
                                           l_buflen,
                                           l_curpos,
                                           l_long_val,
                                           l_long_len
                                          );
               l_curpos := l_curpos + l_long_len;
               RESULT := RESULT || l_long_val;
               DBMS_OUTPUT.put_line (l_long_val);
               EXIT;
            END IF;
 
            RESULT := RESULT || l_long_val;
            -- dbms_output.put_line( l_long_val );
            EXIT WHEN l_long_len = 0;
         END LOOP;
      END IF;
 
      UPDATE historiebei_text
         SET texte = RESULT
       WHERE bei_nr = beinr;
 
      --  dbms_output.put_line( '====================' );
      --  dbms_output.put_line( 'Long was ' || l_curpos || ' bytes in length' );
      DBMS_SQL.close_cursor (l_cursor);
   EXCEPTION
      WHEN OTHERS
      THEN
         IF DBMS_SQL.is_open (l_cursor)
         THEN
            DBMS_SQL.close_cursor (l_cursor);
         END IF;
 
         RAISE;
   END setlongbeitext; | 
Partager