我正在使用 FastAPI 开发应用程序。它包含一个函数,该函数使用此处sqlalchemy.sql.text
所示的 将两个变量带入 SQL 查询。
SELECT ATTR3
FROM TABLE
WHERE ATTR1 = TO_NUMBER(:var1)
AND (CASE
WHEN TO_NUMBER(:var1) NOT IN (1460, 1478, 1481) THEN 'ATTR2 IS NULL'
ELSE ATTR2 = TO_NUMBER(:var2)
END);
因此,粘贴变量后,SQL 查询将如下所示
SELECT ATTR3
FROM TABLE
WHERE ATTR1 = TO_NUMBER('1460')
AND (CASE
WHEN TO_NUMBER('1460') NOT IN (1460, 1478, 1481) THEN 'ATTR2 IS NULL'
ELSE ATTR2 = TO_NUMBER('000')
END);
但是,我收到以下错误:
ORA-00905: 缺少关键字
所以,现在我想知道如何解决这个问题?以及是否可以将 CASE 语句嵌套到 WHERE 子句中?
m条SQL语句的逻辑如下:
我看过一些相关的主题,但它们没有帮助。
我不清楚您要做什么,所以这是一个疯狂的猜测:
为了清楚起见,我添加了一些多余的括号。使用联合是另一种可能性:
添加一个db<>fiddle或与您的帖子类似的内容,以及预期的输出(如果这不能解决您的问题)。
在这种情况下,我认为您可以避免使用 CASE,只需使用 AND、OR。
给定下一个示例:
您可以将查询编写为:
db<>在这里摆弄