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