我正在完成一个PL / SQL块,但是最后的更新语句使我头疼。
以下执行中的操作使我得到一个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;