逐兔郎 2014-05-23 03:43 采纳率: 0%
浏览 784

oracle 中建触发器问题

在Oracle中是否可以建立这样一个触发器,当某张表中除了某个字段的值发生改变,那么就将这个字段的值设为1(该字段原来的值为0)

如:
create or replace trigger Test
after update of res_name on as_res --这里以改变某个字段为例

for each row

begin
update as_res set is_roredis='1' where res_id=:old.res_id;
end Test;

这样报错:触发器不能读它。
不能操作的是同一张表吗?我说的那种需求可以做到吗?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 03:28
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要实现您描述的功能,您可能需要使用SQL标准的更新语句。这通常称为"UPDATE"语句,并且可以通过更改表中的列名来实现。以下是一个示例,其中我们假设您的表名为as_res,并且您希望在更新任何列时都设置is_roredis列的值为1:

    CREATE OR REPLACE TRIGGER Test
    AFTER UPDATE ON as_res
    FOR EACH ROW
    BEGIN
        IF OLD.res_name <> NEW.res_name THEN
            UPDATE as_res SET is_roredis = '1' WHERE res_id = :OLD.res_id;
        END IF;
    END Test;
    

    请注意,此脚本仅适用于列名为res_nameis_roredis的表。如果您想要对其他列进行相同的处理,请相应地调整IF条件。

    另外,注意如果在执行过程中出现错误,则应确保您的数据库系统支持事务隔离级别(例如,READ UNCOMMITTED)。否则,可能会遇到诸如TRIGGER 无法读取它这样的错误。

    评论

报告相同问题?