PLSQL -带变量的更新语句



我目前正在尝试使用一个变量写一个更新语句(稍后将扩展到使用多个变量)。

目前我有以下声明(更改张贴在这里),但我遇到了一个错误,我没有立即看到我所犯的错误:


DECLARE 
v_var1 table1.CY_VALUE % TYPE;
BEGIN
SELECT SUM(Column1 + Column2) 
INTO v_var1
FROM table2
WHERE survey_ID = 1 AND Active_Flag = 1
GROUP BY SURVEY_ID;
UPDATE table1
SET CY_VALUE = v_var1
WHERE SURVEY_ID = 1 AND KPI_ID = 1;
END;

这是我收到的错误:

SQL Error [6550] [65000]: ORA-06550: line 15, column 1pl -00103:遇到符号"END">

: =。(@ %;

在这个例子中,我需要修改什么才能使它工作?或者是否有更好的方法来编写表1的更新,包含表2的求和?

您的代码没有明显的错误。但是,为什么不直接使用相关子查询而不使用变量和PL/SQL呢?

UPDATE table1 t1
SET CY_VALUE = (SELECT SUM(t2.Column1 + t2.Column2)
FROM table2 t2
WHERE t2.survey_ID = t1.survey_ID AND
t2.Active_Flag = 1
)
WHERE SURVEY_ID = 1 AND KPI_ID = 1;

虽然与您的错误无关,但第一个查询中的GROUP BY也具有误导性。具有GROUP BY的聚合查询可以返回任意数量的行——包括0。相反,只需引出GROUP BY:

SELECT SUM(Column1 + Column2) 
INTO v_var1
FROM table2
WHERE survey_ID = 1 AND Active_Flag = 1;

WHERE子句过滤到你想要的survery_ID,如果没有GROUP BY,这个查询总是返回一行。

最新更新