ID的功能,想調用這個函數:調用在刪除之前觸發
CREATE OR REPLACE PACKAGE orders_salary_manage2 AS
FUNCTION total_calc(p_order in NUMBER)
RETURN NUMBER;
END;
CREATE OR REPLACE PACKAGE BODY orders_salary_manage2 AS
tot_orders NUMBER;
FUNCTION total_calc(p_order in NUMBER)
RETURN NUMBER
IS
c_price product.unit_price%type;
c_prod_desc product.product_desc%type;
v_total_cost NUMBER := 0;
CURSOR c1 IS
SELECT product_desc, unit_price
FROM product
WHERE product_id IN (SELECT fk2_product_id
FROM order_line
WHERE fk1_order_id = p_order);
BEGIN
OPEN c1;
LOOP
FETCH c1 into c_prod_desc, c_price;
v_total_cost := v_total_cost + c_price;
EXIT WHEN c1%notfound;
END LOOP;
CLOSE c1;
return v_total_cost;
END;
從這個觸發器:
CREATE OR REPLACE TRIGGER trg_order_total
BEFORE DELETE ON placed_order
FOR EACH ROW
DECLARE
v_old_order NUMBER := :old.order_id;
BEGIN
total_calc(v_old_order);
END;
,但我不斷收到此錯誤,注意有沒有錯誤號剛這樣的:
行錯誤4:PL/SQL:語句被忽略
- BEFORE DELETE ON placed_order
- FOR EACH ROW
- DECLARE
- v_old_order NUMBER:=:old.order_id;
- BEGIN
進出口新的PL/SQL,只是不知道是什麼原因造成的問題。當用戶從訂單表中刪除訂單時,觸發器應該調用該函數以將訂單上的所有產品相加。
謝謝
你已經證明根本不能稱之爲'add_order_func'功能觸發代碼。你的意思是你從當前的觸發代碼中得到了這個錯誤,或者當你試圖改變它來調用這個函數時,你會得到這個錯誤?如果前者,那麼問題可能在於你所調用的'total_calc'程序。如果是後者,則顯示實際嘗試調用函數的觸發器代碼。 – 2013-05-03 20:56:27
嗨,謝謝你的回覆,抱歉我表現出錯誤的功能,我現在已經工作了好幾個小時,我的大腦關閉了。我基本上試圖使功能執行時發生刪除,並且傳遞給函數的參數應該是行 – user2241161 2013-05-03 21:18:57
的order_id(PK),我們錯過了實際的錯誤描述(ORA-XXXXX:bla bla bla ..) – Sebas 2013-05-03 21:22:45