четверг, 1 августа 2013 г.

ORACLE PL/SQL LONG TO VARCHAR2

ORACLE PL/SQL LONG TO VARCHAR2


Вот способ который я нашел в интернете, скорее всего он старый (для 8 оракла я такое уже видел), но делать нечего.

Перевод в LONG:

CREATE OR REPLACE Function convert_long_to_char( pTableName in varchar2,
                                                 pColumnName in varchar2,
                                                 pRowId in rowid ) return varchar2 As
      vCursor    integer default dbms_sql.open_cursor;
      vN         number;
      vLongVal  varchar2(4000);
      vLongLen  number;
      vBuflen    number := 4000;
      vCurPos    number := 0;
   begin
     dbms_sql.parse( vCursor,'select ' || pColumnName || ' from ' || pTableName ||
                                                             ' where rowid = :x',
                     dbms_sql.native );
     dbms_sql.bind_variable( vCursor, ':x', pRowId );
   
     dbms_sql.define_column_long(vCursor, 1);
     vN := dbms_sql.execute(vCursor);
   
     if (dbms_sql.fetch_rows(vCursor)>0) then
       dbms_sql.column_value_long(vCursor, 1, vBuflen, vCurpos ,
                                  vLongVal, vLongLen );
     end if;
     dbms_sql.close_cursor(vCursor);
     return vLongVal;
   end convert_long_to_char;
  /

Собственно насильно режется лонг до 4000 символов.