Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-00936:缺少动态数据的表达式_Sql_Oracle_Syntax Error_Ora 00936 - Fatal编程技术网

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}
  • 这里{{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)
    
    这会引发一个错误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是测试工具中的两个连续步骤。