我在user_views上运行查询。 “TEXT”列为LONG数据类型。所以,当我在where子句中使用此列时,我收到了预期的错误。
错误:ORA-00932:数据类型不一致:预期NUMBER变为LONG
查询是
SELECT view_name, text
FROM user_views
WHERE lower(text) LIKE '%company%'
如何解决这个问题?
答案 0 :(得分:3)
因为TO_CLOB(LONG)转换器/构造函数需要物理指针用于存储(可能是4GB ......),
这应该适合你(在11gR2上测试):
CREATE TABLE DBO.MY_ALL_VIEWS AS
SELECT DV.owner, DV.view_name, TO_LOB(DV.text) AS text
FROM ALL_VIEWS DV;
SELECT count(*)
FROM DBO.MY_ALL_VIEWS
WHERE REGEXP_LIKE(TEXT,'(company)+','i');
答案 1 :(得分:2)
请参阅以下链接:
<强>描述强>
当您遇到ORA-00932错误时,将显示以下错误消息:
ORA-00932:不一致的数据类型原因
您尝试在两种不同的数据类型之间执行操作,但数据类型不兼容。
解决强>
解决此Oracle错误的选项是:
选项#1
更正操作以使数据类型兼容。您可能希望使用转换函数,例如:TO_DATE函数,TO_NUMBER函数或TO_CHAR函数。有关Oracle功能的完整列表,请访问我们的Oracle功能网页。
此错误的一个示例是,如果您尝试使用LONG数据类型的LIKE条件。
例如,如果您创建了下表:
CREATE TABLE suppliers
( supplier_id numeric(10) not null,
supplier_name long not null,
contact_name varchar2(50)
);
然后您尝试在supplier_name列上使用LIKE条件,该列定义为LONG数据类型:
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'IBM%';
不幸的是,您无法在LONG数据类型上使用LIKE条件。
要更正此错误,您可以执行以下操作之一:
选项#2
如果尝试在LONG数据类型上使用Oracle函数,也会发生此错误。
例如,如果您创建了下表:
CREATE TABLE suppliers
( supplier_id numeric(10) not null,
supplier_name long not null,
contact_name varchar2(50)
);
然后您尝试在supplier_name列上使用TO_CHAR函数,该函数定义为LONG数据类型:
SELECT upper(supplier_name)
FROM suppliers;
您将收到错误消息:
不幸的是,您无法在LONG数据类型上使用Oracle函数。
要更正此错误,您可以执行以下操作之一:
答案 2 :(得分:2)
从user_views中创建一个表,并从最近创建的新表中查询您的需求。
create table my_tab as
select view_name myview,to_lob(text) mytext from user_views;
然后
select * from my_tab
where mytext like '%company%';
谢谢。