-1

这是我的代码:

select max(vhis_data.C0432_SAMPL_VALUE1_R), vhis_data.C0401_aid
from vhis_data, T0401_accounts
where vhis_data.C0401_aid = T0401_accounts.C0401_aid
and (
vhis_data.c0401_aid between 1179 and 1291 or
vhis_data.c0401_aid between 1382 and 1402 or
vhis_data.c0401_aid between 1462 and 1620 or

# and so on until...

vhis_data.c0401_aid between 5450 and 5485 or
vhis_data.c0401_aid between 5503 and 5495 or
)

(这些数字代表系统中的各个点)

程序显示错误:

 vhis_data.c0401_aid between 1179 and 1291 or
*
 ERROR at line 5:
ORA-00936: missing expression

我注意到的是错误的第一部分引用了我的 代码部分的第一行。and ( ... )我还注意到我的代码or最后一行有一个额外的内容。我可以把它拿出来,但这是整个部分不起作用or唯一原因吗?and (...)还是我的代码不起作用的另一个原因?

(我想我的一个子问题是,如果缺少表达式,代码在哪里停止正确执行?)

例如,在这里,缺少的表达式可能是最后一行(因为它在“或”之后期待一些东西)。但是,代码甚至没有经过and (...)代码部分的第一行。

我已经在网上梳理了处理错误ORA-00936: missing expression但没有找到任何相关的内容来帮助我在这种特殊情况下的解释。

我欢迎您提出任何批评或建议,并在此先感谢您为我所做的任何贡献!

4

2 回答 2

1

这可能是额外的还是整个和 (...) 部分不起作用的唯一原因?

这是整个查询不起作用的原因。

SQL 查询不像命令字符串那样按顺序“执行”。编译整个查询、构建计划并执行计划。出于这个原因,任何语法错误通常显示为指向没有实际错误的行。

所以“代码”根本不“执行。编译失败,所以没有什么可以执行的。

于 2014-01-17T17:14:29.727 回答
1

你不应该以或结束整个事情

 5495 or
)

这使得整个括号内的短语无效 - () 中的所有内容......所以这就是行号被标记在顶部的原因。

于 2014-01-17T17:12:36.657 回答