我目前正在尝试使用一个变量写一个更新语句(稍后将扩展到使用多个变量)。
目前我有以下声明(更改张贴在这里),但我遇到了一个错误,我没有立即看到我所犯的错误:
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
,这个查询总是返回一行。