我想为名为付款的表创建更新触发器,该表将更新成本列,其中get_out
和get_in
来自另一个实体的价格值之间存在差异
我在创建触发器方面没有太多经验,但到目前为止,这是我所拥有的
CREATE OR REPLACE TRIGGER o1 BEFORE UPDATE OF get_out ON payment
FOR EACH ROW
BEGIN
UPDATE payment
SET payment.cost = ROUND (24 * (to_date(payment.get_out)-to_date(payment.get_in)),0) *
(SELECT price FROM payment,book,place
WHERE book.ID_place = place.ID_place
AND payment.ID_payment = book.ID_payment
AND payment.ID_payment = :NEW.payment.ID_payment
)
;
END;
/
创建触发器时出现此错误:
使用编译错误创建触发器。
LINE/COL ERROR
---------- -----------------------------------------------------------
7/43 PLS-00049: bad bind variable 'NEW.PAYMENT'
有什么建议吗?感谢
答案 0 :(得分:0)
您正试图update
payment
update trigger
:new.cost
。只需将连接的返回值分配给列JOIN ON
。
更喜欢使用book
语法而不是弃用的先前语法,并将表:new.payment.ID_payment
作为表顺序语法中的第一个。
对:new.ID_payment
进行了不小心的尝试,而不是CREATE OR REPLACE TRIGGER o1 BEFORE UPDATE OF get_out ON payment
FOR EACH ROW
BEGIN
:new.cost := round(24 * (to_date(:new.get_out)-to_date(:new.get_in)),0) *
( select price
from book b
join payment py on py.id_payment = b.id_payment
join place pl on pl.id_place = b.id_place
where py.id_payment = :new.id_payment );
END;
/
。
get_out
顺便说一句,如果列get_in
和date
属于date value
类型,只需按住date and time info
而不24.12.2017
(24.12.2017 08:00
,而不是<head>
<title>Royal Page</title>
<link href="${resource(dir: 'css', file: 'common.css')}" type="text/css" rel="stylesheet">
),那么就不需要在你的减法中使用to_date。