触发更新另一个表

时间:2011-03-04 17:57:46

标签: sql oracle triggers

CREATE TRIGGER update_orderline

AFTER INSERT OR UPDATE ON ORDERS

FOR EACH ROW

BEGIN

  INSERT INTO ORDERLINE(orderline_no, qty, order_no, product_no)

  VALUES (ol_no.nextval, :new.qty, :new.order_no, :new.product_no);

END;

我正在尝试创建一个触发器,在将新记录插入订单后更新订单行表。但是我得到了这个错误:

Error(3,26): PLS-00049: bad bind variable 'NEW.QTY'

Error(3,51): PLS-00049: bad bind variable 'NEW.PRODUCT_NO'

2 个答案:

答案 0 :(得分:1)

如果我不得不猜测订单表没有名为'order_no'和'product_no'的列。我可以在这种情况下重现错误并获取绑定变量消息。那么订单表的列名是什么?

更新:根据您的评论,没有任何内容可以从order_no或product_no获取新值或者数量为qty。您认为这些价值来自哪里?

更新:根据您的更新,您在订单表中有以下列:

  

order_no,
  employee_no,
  branch_no,
  order_date的,
  ship_date,
  SHIPPING_METHOD,
  tax_status,
  小计,
  tax_amt,
  shipping_charge,
  total_amt,
  CUSTOMER_NO

在列表列表中,我没有看到product_no或qty。 Order_no就在那里。

答案 1 :(得分:0)

我想我找到了。

请看这里:http://www.tek-tips.com/viewthread.cfm?qid=1556226&page=14

  

你无意中发现了原因,   一般来说,在“甲骨文世界”中   用于编写用户定义名称的错误表单   在双引号内。你看,   每当您在Oracle中定义名称时   使用双引号和任何alpha   那么,不是大写的字符   你必须经常使用双引号和   相同的混合大小写配置。如果   那么你不要使用双引号   甲骨文假设不管   你在代码中的情况,那是你的   Oracle名称是大写的!

     

所以,当你在你的代码中引用时,   “...... INTO:new.user_idx ......”,   Oracle会查找“USER_IDX”   找不到,因为你定义了   列为*“user_idx”* - “user_idx”   <> “USER_IDX”。

     

如果您清理所有代码   双引号,然后你的问题   应该消失。