【发布时间】:2019-09-28 04:04:55
【问题描述】:
我正在尝试找出代码来向 ATA_ENTERTAINER 表中添加一个名为 MORE_THAN_ONE 的新列,其数据类型为 NUMBER(此代码将在 PL/SQL 代码之外)。如果艺人有多个样式类型,则此列将保存其拥有的样式类型的数量(如果有,则在此列中放置 NULL)。
我的代码应该使用明确的光标和循环结构,遍历每个艺人并确定他们拥有的样式数量。如果一个艺人有多个,我需要修改该艺人的 MORE_THAN_ONE 列中的值以及样式数(如果不超过一个,则应在此列中输入 NULL)。我还需要使用 FOR UPDATE 和 WHERE CURRENT OF 作为我的解决方案的一部分。使用基本循环来解决这个问题, 以及任何决策结构的 IF。
这就是我现在所拥有的。 它没有显示任何错误,但不知何故,当我运行此代码时,我的表没有更新/更改。
DECLARE
ata_entId ata_entertainer.entertainer_id%TYPE;
ata_st_entId ata_entertainers_style.entertainer_id%TYPE;
ata_more ata_entertainer.more_than_one%TYPE;
ata_count NUMBER(10) := 0;
CURSOR ata_rec IS
SELECT entertainer_id
FROM ata_entertainers_style
WHERE ata_st_entId = ata_entId
FOR UPDATE;
BEGIN
OPEN ata_rec;
LOOP
FETCH ata_rec INTO ata_st_entId;
EXIT WHEN ata_rec%NOTFOUND;
IF ata_st_entId = ata_entId THEN ata_more := ata_count+1;
UPDATE ata_entertainer SET more_than_one = ata_more
WHERE CURRENT of ata_rec;
END IF;
END LOOP;
CLOSE ata_rec;
END;
/
【问题讨论】:
-
请贴出数据库表结构
ATA_ENTERTAINER。 -
@Abra 我刚刚做了!
-
根据您发布的图表,表
ATA_ENTERTAINER不包含MORE_THAN_ONE列。如您的问题所述,您是否已将该列成功添加到表格中? -
这是学校的练习吗?在“现实”生活中,人们会使用一条更新语句来执行任务。