【发布时间】:2020-11-15 02:18:15
【问题描述】:
我在 Oracle 数据库中有三个表: 内容、内容数据、数据类型
CONTENT_DATA 中的数据记录如下:
PK_ID DATA_TYPE_ID CONTENT_ID VALUE
1 1 1 0
2 2 1 100
3 3 1 200
我需要根据 CONTENT_DATA 表中的 DATA_TYPE_ID 将“value”列更新为其他“value”列的总和,并且应该为每个 CONTENT_ID 完成此过程。 例如:VALUE(DATA_TYPE(3)) = SUM(VALUE(DATA_TYPE(1)), VALUE(DATA_TYPE(2)))
我创建了如下所示的过程。但它运行得很慢。有没有更好的选择来处理这样的问题?
CREATE OR REPLACE PROCEDURE UPDATE_DATA
AS
CURSOR your_cursor is
SELECT DISTINCT CONTENT_ID FROM CONTENT_DATA;
item your_cursor%rowtype;
BEGIN
OPEN your_cursor;
loop
FETCH your_cursor INTO item;
UPDATE CONTENT_DATA SET VALUE =
(SELECT SUM(NVL(VALUE,0)) FROM CONTENT_DATA WHERE DATA_TYPE_ID IN(1,2)
AND CONTENT_ID = item.CONTENT_ID)
WHERE CONTENT_ID = item.CONTENT_ID AND DATA_TYPE_ID = 3;
UPDATE CONTENT_DATA SET VALUE = (SELECT SUM(NVL(VALUE,0)) FROM CONTENT_DATA WHERE DATA_TYPE_ID IN(3,4,5,6,7,8,9)
AND CONTENT_ID = item.CONTENT_ID)
WHERE CONTENT_ID = item.CONTENT_ID
AND DATA_TYPE_ID = 10;
UPDATE CONTENT_DATA SET VALUE = (SELECT SUM(NVL(VALUE,0)) FROM CONTENT_DATA WHERE DATA_TYPE_ID IN( 10,11,12,13,14)
AND CONTENT_ID = item.CONTENT_ID)
WHERE CONTENT_ID = item.CONTENT_ID
AND DATA_TYPE_ID = 15;
end loop;
close your_cursor;
END;
【问题讨论】:
-
编辑您的问题并显示您想要的结果。
标签: sql oracle plsql cursor updates