在Oracle觸發(fā)器中,DECLARE
關(guān)鍵字用于聲明局部變量、常量、游標(biāo)、異常等。這些聲明需要在觸發(fā)器的BEGIN...END
塊之前進(jìn)行。以下是一個簡單的示例,展示了如何在Oracle觸發(fā)器中使用DECLARE
聲明局部變量和游標(biāo):
CREATE OR REPLACE TRIGGER my_trigger
AFTER INSERT ON my_table
FOR EACH ROW
DECLARE
v_new_id NUMBER;
CURSOR c_my_data IS
SELECT id, name FROM my_table WHERE id = :new.id;
BEGIN
-- 聲明局部變量
v_new_id := :new.id;
-- 打開游標(biāo)
OPEN c_my_data;
-- 獲取游標(biāo)中的數(shù)據(jù)
LOOP
FETCH c_my_data INTO v_id, v_name;
EXIT WHEN c_my_data%NOTFOUND;
-- 處理游標(biāo)中的數(shù)據(jù)
DBMS_OUTPUT.PUT_LINE('ID: ' || v_id || ', Name: ' || v_name);
END LOOP;
-- 關(guān)閉游標(biāo)
CLOSE c_my_data;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/
在這個示例中,我們創(chuàng)建了一個名為my_trigger
的觸發(fā)器,它在插入新記錄到my_table
表后執(zhí)行。在觸發(fā)器的DECLARE
塊中,我們聲明了一個名為v_new_id
的局部變量和一個名為c_my_data
的游標(biāo)。然后,在BEGIN
塊中,我們使用:new.id
獲取插入的新記錄的ID,并將其賦值給v_new_id
。接下來,我們打開游標(biāo)c_my_data
,并使用LOOP
循環(huán)遍歷游標(biāo)中的數(shù)據(jù),將它們輸出到控制臺。最后,我們在EXCEPTION
塊中處理可能發(fā)生的異常。