我有一个senario,我在查询中有以下Where子句。我正在使用Oracle 11g (11.2.0.1)
select * from aTable WHERE (attribute_name IN
(SELECT * FROM TABLE(CAST(:pbindvar AS CHARTABLETYPE)))or :pbindvar IS NULL)
此绑定变量的值是一个数组,但是当我尝试将null值传递给此bindvariable时,我收到以下错误
Expected - Got Char Error
任何人都可以告诉我如何将null
值传递给此Bind
变量,以便查询将返回所有行集而不应用where条件。
堆栈跟踪如下
ORA-00932: inconsistent datatypes: expected - got CHAR
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
我也尝试了以下内容,但没有运气仍然得到相同的异常
我尝试使用条件where
子句仍然得到相同的错误
WHERE (CASE WHEN :pbindvar is NULL THEN 1
WHEN attribute_name IN (SELECT * FROM TABLE(CAST(:pbindvar AS CHARTABLETYPE))) THEN 1
ELSE 0
END) = 1
如果我更改了下面提到的第二个条件where
子句,则查询将返回所有行
WHERE (CASE WHEN :pbindvar is NULL THEN 1
WHEN attribute_name IN (:pbindvar) THEN 1
ELSE 0
END) = 1
使用hr架构的示例查询
select * from Departments where department_name in (Select * from table(cast(:pbindvar as CHARTABLETYPE))) or :pbindvar is Null;
为类型
创建查询create or replace type chartabletype
as table of VARCHAR2(4000);
只有将 null 传递给绑定变量
时才会出现此问题