ORA-00932:不一致的数据类型:预期NUMBER变长

时间:2014-01-16 09:59:45

标签: sql oracle

我在user_views上运行查询。 “TEXT”列为LONG数据类型。所以,当我在where子句中使用此列时,我收到了预期的错误。

  

错误:ORA-00932:数据类型不一致:预期NUMBER变为LONG

查询是

SELECT view_name, text
FROM user_views 
WHERE lower(text) LIKE '%company%'

如何解决这个问题?

3 个答案:

答案 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错误时,将显示以下错误消息:

  

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条件。

要更正此错误,您可以执行以下操作之一:

  • 不在SQL中使用LIKE条件(针对LONG数据类型字段)。
  • 考虑修改表,以便supplier_name字段是VARCHAR2或CHAR字段。
  • 尝试编写自定义PLSQL函数以将LONG转换为VARCHAR2。

选项#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函数。

要更正此错误,您可以执行以下操作之一:

  • 不在SQL中使用Oracle函数(针对LONG数据类型字段)。
  • 考虑修改表,以便supplier_name字段是VARCHAR2或CHAR字段。
  • 尝试编写自定义PLSQL函数以将LONG转换为VARCHAR2。

答案 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%';

谢谢。