Oracle错误"不一致的数据类型:预期CHAR变长"

dev*_*r82 4 sql oracle oracle11g

我正在尝试运行以下查询来查找包含给定关键字的视图:

select  *
from    ALL_VIEWS
where   OWNER = 'SALESDBA'
        and TEXT like '%rownum%';
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

ORA-00932: inconsistent datatypes: expected CHAR got LONG
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:
Error at Line: 4 Column: 13
Run Code Online (Sandbox Code Playgroud)

如果我只是从ALL_VIEWS中选择,而不是在TEXT字段中看到查询(TEXT).

我在这做错了什么?

Fra*_*itt 7

你的问题是TEXT的类型是LONG - 虽然Oracle很久很久以前就弃用了这种类型,但他们仍然在自己的视图中使用它:-(

要将LONG转换为(可搜索的)CLOB,可以使用该TO_LOB()函数(请参阅TO_LOB()的Oracle文档.

不幸的是,这不适用于简单的SELECT陈述.你必须创建一个中间表:

create table search_all_views as 
select  av.owner, av.view_name, to_lob(text) as text_clob
from    ALL_VIEWS av;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用该表进行搜索:

select * 
from search_all_views
where text_clob like '%rownum%';
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 TEXT_VC 作为检查条件的列。例如:

select  *
from    ALL_VIEWS
where   OWNER = 'SALESDBA'
        and TEXT_VC like '%rownum%';
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。

  • 这是 12g 的*有效*更新,但应该注意的是,数据类型是 VARCHAR2(4000),因此文本可以被截断。 (3认同)