Процедура dbms_sql.define_column_long вызывает ORA-00932: несовместимые типы данных: ожидаемый CHAR получил LONG BINARY - PullRequest
2 голосов
/ 02 июня 2019

В моей таблице есть столбец, который определен как тип LONG RAW, и в этом столбце есть записи размером более 32 КБ.Я искал в Интернете, как я могу получить значение LONG RAW, которое больше, чем 32 КБ, поэтому я получил некоторый ответ для получения его несколькими кусками.

Но когда я попытался реализовать это решение, я получил ошибку, котораяЯ не могу решить.

У меня нет привилегии в БД для создания функции или создания новой таблицы, поэтому я попытался реализовать решение, как показано ниже,

set serveroutput on size 100000 
declare
p_long_col char(123):='MESSAGE';
p_source varchar2(200):='USR_MESSAGE_ARCHIVE';
v_sql   VARCHAR2(32767) := 'select %l% from %v% where rownum<2 ';
v_piece VARCHAR2(32767);
v_clob  CLOB;
v_plen  INTEGER := 32767;
v_tlen  INTEGER := 0;
v_rows  NUMBER(38);
v_csr   number;
begin 
 v_sql := REPLACE(REPLACE(v_sql, '%l%', p_long_col), '%v%', p_source);
v_csr := DBMS_SQL.OPEN_CURSOR;
dbms_sql.parse( v_csr, v_sql, dbms_sql.native );
dbms_sql.define_column_long(v_csr, 1);
if (dbms_sql.EXECUTE_AND_FETCH(v_csr)>0) then
loop
DBMS_SQL.COLUMN_VALUE_LONG(v_csr, 1, 32767, v_tlen, v_piece, v_plen);
           v_clob := v_clob || v_piece;
           v_tlen := v_tlen + 32767;
           EXIT WHEN v_plen < 32767;
END LOOP;
end if;
DBMS_SQL.CLOSE_CURSOR(v_csr);
end;

Нижеэто ошибка, которую я вижу: -

Error report -
    ORA-00932: inconsistent datatypes: expected CHAR got LONG BINARY
    ORA-06512: at "SYS.DBMS_SQL", line 1837
    ORA-06512: at line 18
    00932. 00000 -  "inconsistent datatypes: expected %s got %s"

Номер строки в ошибке говорит о том, что выдает ошибку при: - dbms_sql.define_column_long (v_csr, 1);

Я новичок вPL / SQL, пожалуйста, предложите мне по этому вопросу, это будет очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...