Oracle Error “inconsistent datatypes: expected CHAR got LONG”

感情迁移 提交于 2019-12-23 15:23:10

问题


I'm trying to run the following query to find views containing a given keyword:

select  *
from    ALL_VIEWS
where   OWNER = 'SALESDBA'
        and TEXT like '%rownum%';

I'm getting the following error message:

ORA-00932: inconsistent datatypes: expected CHAR got LONG
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:
Error at Line: 4 Column: 13

if I just select from ALL_VIEWS than I see the query (TEXT) in the TEXT field.

What am I doing wrong here?


回答1:


Your problem is that TEXT is of type LONG - although Oracle deprecated this type a long, long time ago, they're still using it in their own views :-(

To convert a LONG to a (searchable) CLOB, you can use the TO_LOB() function (see Oracle documentation for TO_LOB().

Unfortunately, this doesn't work for simple SELECT statements. You'll have to create an intermediary table:

create table search_all_views as 
select  av.owner, av.view_name, to_lob(text) as text_clob
from    ALL_VIEWS av;

Then, you can search using that table:

select * 
from search_all_views
where text_clob like '%rownum%';


来源:https://stackoverflow.com/questions/27523530/oracle-error-inconsistent-datatypes-expected-char-got-long

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!