這個觸發器如果在SQLSERVER中執行一點問題沒有,但是在ORACLE中是允許這樣做,因為Oracle的觸發器中(確切地是說行級觸發器)不允許訪問變異表。
    你要解決這個問題的唯一辦法就是將你的觸發器拆成兩個觸發器:
一個是Before型的行級觸發器,在這個觸發器中將你要修改的第一行的主鍵值保存一個事先定義好的包的一個數組型的變量中;
另一個是After型的語句級觸發器,在這個觸發器中再取出你在前一個觸發器中保存的值再循環做你要做的處理。
    就你的例子而言你應該這樣做:
第一步:建立一個包
CREATE OR REPLACE PACKAGE MyPag AS 
TYPE t_col1 is table of myTable.col1%type
index by binary_integer;
v_co1 t_col1;
v_row binary_integer := 0;
end MyPag;
第二步:建立一BEFORR的行級觸發器
CREATE OR REPLACE TRIGGER TR_MYTABLE_UPDATE_ROW
BEFORE UPDATE ON TABLE MYTABLE FOR EACH ROW 
BEGIN
    MyPag.v_row := MyPag.v_row + 1;
    MyPag.v_col(MyPag.v_row) := :new.col1;
END TR_MYTABLE_UPDATE_ROW ;
第三步:建立一個AFTER的語句級觸發器
CREATE OR REPLACE TRIGGER TR_MYTABLE_UPDATE
AFTER UPDATE ON TABLE MYTABLE
v_col MYTABLE.COL1%TYPE;
v_rows NUMBER;
BEGIN 
FOR V_LOOP IN 1..MyPag.v_row LOOP
    v_col := MyPag.v_col(V_LOOP);
    SELECT COUNT(1) INTO v_rows FROM MYTABLE WHERE COL1 = v_col;
END LOOP;
END TR_MYTABLE_UPDATE;