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;
我正在完成一个 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;