首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查看ORA-00905: WHERE子句中的CASE语句导致的缺少关键字错误

查看ORA-00905: WHERE子句中的CASE语句导致的缺少关键字错误
EN

Stack Overflow用户
提问于 2022-03-26 00:13:17
回答 1查看 54关注 0票数 0

我在位置上看到了一个ORA-00905: missing keyword at错误: 181,似乎找不出SQL (Oracle /SQL)的错误所在。

代码语言:javascript
运行
复制
SELECT *
FROM FOO
    WHERE LOCATION = :LOCATION
      AND SAVED_DATE >= CASE WHEN :BEGIN_D IS NULL THEN SAVED_DATE ELSE TIMESTAMP :BEGIN_D END
      AND SAVED_DATE <= CASE WHEN :END_D IS NULL THEN SYSDATE ELSE TIMESTAMP :END_D END
 ORDER BY SAVED_DATE;

我的假设是,在事件发生时,用户输入是:

代码语言:javascript
运行
复制
:LOCATION = 'new york'
:BEGIN_D = NULL
:END_D = NULL

然后推导出以下查询:

代码语言:javascript
运行
复制
SELECT *
FROM FOO
    WHERE LOCATION = 'new york'
      AND SAVED_DATE >= SAVED_DATE -- This line is ignored
      AND SAVED_DATE <= SYSDATE
 ORDER BY SAVED_DATE;

不过,我在一开始就看到了提到的错误。

当输入不是NULL (Ex::BEGIN_D = '2015-12-01 00:01:44')时,我不会看到错误。如果:BEGIN_D:END_D要么是NULL,要么两者都是NULL,则错误将返回。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-26 00:20:46

绑定变量不是替代变量;它们没有被您输入的文本替换,因此不能使用TIMESTAMP :BEGIN_D。您只需要使用:BEGIN_D并传入TIMESTAMP数据类型。

代码语言:javascript
运行
复制
SELECT *
FROM   FOO
WHERE  LOCATION = :LOCATION
AND    SAVED_DATE >= CASE WHEN :BEGIN_D IS NULL THEN SAVED_DATE ELSE :BEGIN_D END
AND    SAVED_DATE <= CASE WHEN :END_D IS NULL THEN SYSDATE ELSE :END_D END
ORDER BY SAVED_DATE;

您还不需要使用CASE表达式:

代码语言:javascript
运行
复制
SELECT *
FROM   FOO
WHERE  LOCATION = :LOCATION
AND    (:BEGIN_D IS NULL OR SAVED_DATE >= :BEGIN_D)
AND    ((:END_D IS NULL AND SAVED_DATE <= SYSDATE) OR SAVED_DATE <= :END_D)
ORDER BY SAVED_DATE;

如果要传入字符串值(而不是时间戳),则使用TO_DATE

代码语言:javascript
运行
复制
SELECT *
FROM   FOO
WHERE  LOCATION = :LOCATION
AND    (:BEGIN_D IS NULL OR SAVED_DATE >= TO_DATE(:BEGIN_D, 'YYYY-MM-DD HH24:MI:SS'))
AND    ((:END_D IS NULL AND SAVED_DATE <= SYSDATE) OR SAVED_DATE <= TO_DATE(:END_D, 'YYYY-MM-DD HH24:MI:SS'))
ORDER BY SAVED_DATE;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71624345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档