PL/SQL 立即执行更新查询,给出 SQLCODE -932

PL/SQL Execute inmediate Update query giving SQLCODE -932

我正在完成一个 PL/SQL 块,但最后的更新语句让我很头疼。

下面的 EXECUTE INMEDIATE 告诉我一个 SQLCODE -932 和程序中断。

EXECUTE IMMEDIATE 'UPDATE RS2QTCIN cin SET cin.date_end = '|| dateINSERT ||' WHERE cin.id = '|| REG1.c1id;

查询很简单,dateINSERT是声明块中定义的变量,最后的值(REG1.c1id ), 是游标也定义的结果。

更新查询似乎是正确的,变量与查询字符串连接在一起。

不要将参数连接到 SQL 字符串中,而是使用占位符:

EXECUTE IMMEDIATE 'UPDATE RS2QTCIN cin SET cin.date_end = :1 WHERE cin.id = :2'
  USING dateINSERT, REG1.c1id;

但是由于您的 SQL 中没有动态标识符,您不需要动态 SQL 开头:

UPDATE RS2QTCIN cin 
    SET cin.date_end = dateINSERT 
WHERE cin.id = REG1.c1id;