Sql ORA-00936:缺少动态数据的表达式
我有两个查询,动态地获取数据Sql ORA-00936:缺少动态数据的表达式,sql,oracle,syntax-error,ora-00936,Sql,Oracle,Syntax Error,Ora 00936,我有两个查询,动态地获取数据 从表1中选择cid,其中cNumber={{custNbr} 这里{{custNbr}}来自一个.txt文件 updatetable2设置status='A',其中customer_id=NVL({{cid}},0000) 这里{{customer_id}}来自步骤1的输出 问题:当步骤1返回NULL时,它实际上返回一个空字符串'。因此,步骤2转化为- update table2 set status='A' where customer_id=NVL(,0000)
从表1中选择cid,其中cNumber={{custNbr}
updatetable2设置status='A',其中customer_id=NVL({{cid}},0000)
'
。因此,步骤2转化为-
update table2 set status='A' where customer_id=NVL(,0000)
这会引发一个错误java.sql.SQLSyntaxErrorException:ORA-00936:缺少表达式
如何重写查询以使其工作。在您的情况下,为第一个查询的结果提供回退可能就足够了:
Select nvl(cid, -1) as cid
from table1
where cNumber={{custNbr}}
这假设-1在表2中不作为客户ID出现。因此,UPDATE
在语法上是有效的,但它将更新零行
警告
然而,我非常怀疑一个不能将
NULL
值作为数据库查询输入的工具。您可能需要就此联系DevTest支持部门。您的查询完全正确。错误在围绕它们的逻辑中-当您得到NULL的cid时,它到底意味着什么?这是您的数据中的错误吗?在这种情况下,是否应该跳过更新?如果您需要进一步的帮助,请回答您的问题并添加您用来使其成为a的Java代码-您的第一个查询可能根本不会返回任何行,cid可能只是未初始化。如果给定的cNumber没有数据,select可以返回空值。在这种情况下,可以跳过更新,也可以无错误地运行更新。我没有这方面的java代码,因为这些都是在DevTest工具上测试时的步骤。步骤1和2是测试工具中的两个连续步骤。