PL / SQL执行中间更新查询,给出SQLCODE -932

问题描述 投票:0回答:1

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

以下执行中的操作使我得到一个SQLCODE -932并且程序中断。

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

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

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

sql plsql sql-update oracle12c dynamic-sql
1个回答
0
投票

不要将参数连接到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;
© www.soinside.com 2019 - 2024. All rights reserved.