gpt4 book ai didi

database - 问题而不是在 oracle 中删除 View

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:58 27 4
gpt4 key购买 nike

我的观点是:

select * from ot.vw_rebellionrid;

正在向我展示:

enter image description here

full_nametrainer 表的列subject_namesubject 表的列

View 有查询:

SELECT full_name, subject_name
FROM ot.trainer, ot.subject;

所以,我正在学习 instead of delete tigger,所以 instead of trigger 的代码是:

CREATE OR REPLACE TRIGGER ot.io_delete
INSTEAD OF DELETE ON ot.vw_RebellionRid
FOR EACH ROW
BEGIN
DELETE FROM ot.trainer WHERE FULL_NAME = :old.FULL_NAME;
DELETE FROM ot.subject WHERE SUBJECT_NAME= :old.SUBJECT_NAME;
END;
/

因此,要执行此触发器,我执行以下语句:

delete from ot.vw_RebellionRid where subject_name='java';

当它被执行时,则:

2 rows deleted.

根据我的理解,由于这两行都有subject_name as java剩下的输出,我想删除后会是:

--------------------------
full_name | subject_ name |
---------------------------
Manish Sharma Oracle |
ashwin Oracle |
---------------------------

但是当我执行

select * from ot.vw_RebellionRid ;

然后,我得到了 EMPTY TABLE 的输出;

enter image description here

因为,有 4 行,2 行被删除,但是当我再次选择 View 时,我怎么会得到空表?我应该得到剩下的两行。

最佳答案

我认为您的触发器工作正常。

DELETE FROM ot.trainer WHERE FULL_NAME = :old.FULL_NAME;

它将删除名称为 manishashwin 的 2 行,因为它们都带有 java 标记。

同理,

DELETE FROM ot.subject WHERE SUBJECT_NAME= :old.SUBJECT_NAME;

它将从表 subject 中删除主题 java,所以现在表 subject 将有 1 条记录剩余,即 Oracle

现在,您的 View 查询将连接 2 个表(trainer 表有 0 行,subject 表有 1 行),因此不会产生任何结果。

你需要明白这一点,

delete from ot.vw_RebellionRid where subject_name='java';

正在删除总共 3 条记录。

干杯!

关于database - 问题而不是在 oracle 中删除 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58333220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com