【发布时间】:2015-09-03 16:17:59
【问题描述】:
我正在使用 PLSQL 创建一个基于查询另一个表来更新表的过程,为此我使用了一个循环。对于测试,我推迟了程序代码,只是试图使以下脚本工作。但它不断抛出错误,包括“遇到符号“文件结尾””或“无效的 SQL 语句”,基于小的调整。我哪里错了?
DECLARE CURSOR cur IS
SELECT * FROM Summary;
BEGIN
FOR rec in cur
LOOP
UPDATE Award
SET monthly_sales = (
SELECT COUNT(*)
FROM Sales
WHERE employee_id = rec.employee_id
AND to_char(Sales.SALES_DATE,'YY/MM')=to_char(SYSDATE,'YY/MM')
)
WHERE Summary.employee_id = rec.employee_id
END LOOP
END;
/
【问题讨论】:
-
在格式字符串中使用
AND trunc(Sales.SALES_DATE,'month') = trunc(SYSDATE,'month')和to_char函数可能会更好。如果您的销售表曾经包含超过 100 年的数据,您可以获得超过一个世纪的计数,尽管这个错误需要很长时间才能出现。 -
@boneist 点,你可以在纯 SQL 中执行此操作,这将比循环中逐行更新更快。
标签: sql oracle stored-procedures plsql