我正在尝试创建一个Oracle查询,该查询将使用基于按钮的CommandName
的参数。
所以这是我的查询
SELECT id
FROM table
WHERE dateTime IS (CASE WHEN :CommandName = 'FIRST' THEN NULL ELSE NOT NULL END)
所以我传递了参数,但它不起作用 - 我只是得到Missing NULL keyword
错误
我基本上不想根据输入的参数
编写两个单独的查询甚至不确定这是否可行或者这是否正确?
有什么想法吗?
答案 0 :(得分:4)
您可能想要更多地阅读CASE声明。
我相信您需要以下代码:
SELECT
id
FROM
table
WHERE
(
(dateTime IS NULL AND :CommandName = 'FIRST')
OR
(dateTime IS NOT NULL AND NVL(:CommandName, '') <> 'FIRST')
)
答案 1 :(得分:1)
不使用动态SQL返回字符串'NULL'或'NOT NULL',您可以使用两个NVL()
函数:
select id
from table
where NVL(dateTime,'FIRST') = NVL(:param,dateTime);
但是,如果将dateTime编入索引(并且Oracle可以索引NULL),则NVL()函数将禁用索引。
答案 2 :(得分:0)
我认为
SELECT id
FROM table
WHERE (dateTime IS NULL AND :CommandName='FIRST') OR (dateTime IS NOT NULL AND :CommandName <> 'FIRST')
应该做你需要的。