ORA-00932: противоречивые типы данных: ожидается, что LONG BINARY получит BLOB - PullRequest
0 голосов
/ 20 мая 2018
create or replace function CasLengthOfLongRaw( p_tname in varchar2,  
     p_cname in varchar2,  
     p_rowid in rowid ) return number  
AUTHID CURRENT_USER  as pragma autonomous_transaction;  
   l_length number;  
begin 
   execute immediate 
   'insert into TEMPCSSRPLLOB(LOBFIELD)  
   select to_lob(' || p_cname || ')  
   from ' || p_tname || '  
   where rowid = :x' using p_rowid;  
   select dbms_lob.getlength(LOBFIELD) into l_length  
   from TEMPCSSRPLLOB;  
   commit;  
    return  l_length;  
end; 

Для этой функции я получаю ошибку

в строке 7 и ошибку ORA ORA-00932: несовместимые типы данных: ожидается, что LONG BINARY получил BLOB ORA-06512: в строке "CASLENGTHOFLONGRAW", строка7 00932. 00000 - "несовместимые типы данных: ожидаемые% s получили% s"

1 Ответ

0 голосов
/ 20 мая 2018

Функция to_lob() преобразует значение LONG или LONG RAW в большой объект.

Из сообщения об ошибке целевой столбец LOBFIELD представляет собой BLOB, поэтому ожидается, что исходный столбец, определенный переменными p_tname.p_cname, будет иметь тип данных LONG RAW.Из сообщения видно, что это уже BLOB, поэтому преобразование не требуется:

...
   execute immediate 
   'insert into TEMPCSSRPLLOB(LOBFIELD)  
   select ' || p_cname || '  
   from ' || p_tname || '  
   where rowid = :x' using p_rowid;  
...

Но так как функция называется CasLengthOfLongRaw, проблема, действительно, заключается в том, что функция делает то, что выхотите, но вы передаете ему информацию о неподходящем имени таблицы и столбца для операции, которую предполагается выполнить.

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