我在PL / SQL中尝试一个简单的触发器。触发器应该维护一个日志表。日志将记录系统日期和受影响的行数。
这是我的代码:
CREATE OR REPLACE TRIGGER CREATELOGUPDATE
AFTER DELETE ON TREATMENT_HISTORY
BEGIN
INSERT INTO LOG VALUES(SYSDATE,SQL%ROWCOUNT);
END;
这只是一个声明级触发器。它在第2行给出了一个缺少的字符错误。
我还有一个问题。
SQL%ROWCOUNT是否正确用于计算受上一个语句影响的行数?
答案 0 :(得分:0)
将代码更改为:
CREATE OR REPLACE TRIGGER CREATELOGUPDATE
AFTER DELETE ON TREATMENT_HISTORY
DECLARE
rows_number NUMBER;
BEGIN
rows_number:=SQL%ROWCOUNT;
INSERT INTO LOG VALUES(SYSDATE,rows_number);
END;
将使您的触发器无错误地创建。但是,它不会按预期工作,因为SQL%ROWCOUNT在这里使用是不正确的,并将永久返回NULL。
一种可能的解决方案是创建一个ROW级触发器,并为每个受影响的行增加存储在日志表中的一些数字。