1 CREATE OR REPLACE TRIGGER T_TT BEFORE INSERT ON TT FOR EACH ROW 2 DECLARE 3 V_CNT NUMBER; 4 BEGIN 5 SELECT COUNT(*) INTO V_CNT FROM TT WHERE ID2=:NEW.ID2; 6 :NEW.ID3:=V_CNT; 7* END; SQL> /触发器已创建SQL> INSERT INTO TT VALUES(1,2,2);已创建 1 行。 SQL> SELECT * FROM TT; ID ID2 ID3 ---------- ---------- ---------- 1 2 0SQL> INSERT INTO TT VALUES(2,2,2);已创建 1 行。SQL> SELECT * FROM TT; ID ID2 ID3 ---------- ---------- ---------- 1 2 0 2 2 1SQL> SQL> DESC TT 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- ID NUMBER ID2 NUMBER ID3 NUMBER
1 CREATE OR REPLACE TRIGGER T_TT BEFORE INSERT ON TT FOR EACH ROW
2 DECLARE
3 V_CNT NUMBER;
4 BEGIN
5 SELECT COUNT(*) INTO V_CNT FROM TT WHERE ID2=:NEW.ID2;
6 :NEW.ID3:=V_CNT;
7* END;
SQL> /触发器已创建SQL> INSERT INTO TT VALUES(1,2,2);已创建 1 行。
SQL> SELECT * FROM TT; ID ID2 ID3
---------- ---------- ----------
1 2 0SQL> INSERT INTO TT VALUES(2,2,2);已创建 1 行。SQL> SELECT * FROM TT; ID ID2 ID3
---------- ---------- ----------
1 2 0
2 2 1SQL>
SQL> DESC TT
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER
ID2 NUMBER
ID3 NUMBER
怎么给分啊?
我没多少分
我还有个问题要问,不是说oracle的触发器是不能在当前变化表上做DML(insert,update,delete)的吗
还有就是为什么我用after怎么不行,必须用before呢就是在执行前触发呢?