Sql 触发器更新另一个表

Sql 触发器更新另一个表,sql,oracle,triggers,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.pr

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

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;
我想我找到了

看这里:

你无意中发现了原因, 在“甲骨文世界”中,它通常是 对用户定义的名称进行编码的表单不正确 在双引号内。你看,, 每当您在Oracle中定义名称时 使用双引号和任意alpha 不是大写的字符,那么 必须始终使用双引号和 相同的混合案例配置。如果 那么,您不使用双引号 甲骨文假定,不管 你的案子在代码里,你的 甲骨文名称是大写的

所以,当你提到你的代码时, 至“…进入:新的.user_idx…”, Oracle查找“USER_IDX”,它 找不到,因为您定义了它 列为*“用户\u idx”*--“用户\u idx” “用户_IDX”

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


如果我不得不猜测orders表没有名为“order\u no”和“product\u no”的列。在这种情况下,我可以复制错误并获得bind变量消息。那么orders表的列名是什么

更新:根据您的评论,对于订单号或产品号或该事项的数量,没有任何内容可从中获取新值。您希望这些值来自哪里

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

订单号,
员工编号,
分行编号,
订单日期,
发货日期,
装运方法,
税务状况,
小计,
税额,
运费,
总金额,
客户号


在该列列表中,我看不到产品编号或数量。订单号在那里。

您能告诉我们订单表的结构吗?订单号、员工号、分公司号、订单日期、发货日期、发货方式、税务状态、小计、税务金额、发货费用、总金额、客户无法解释业务逻辑。数量来自哪里?您最好使用一个存储过程来封装order和order_line@Xavinou的插入/更新:谢谢,但双引号不是我的问题。我检查了创建脚本以确保:(@jschoen:我以为新的值会是在orders表中插入的值。例如,假设在orders表中插入了一个新行,那么触发器应该根据新记录的内容更新orderline。因此,新记录也会有product no和Quantity。@jschoen:哦!你是对的,没有product_no。因此,这意味着ns,产品编号必须来自产品table@tbrown也许您是在向后执行此操作。也许您的订单行表应该有一个触发器,该触发器将在订单表更新时插入或更新订单。但可能不是。您可能需要将此类型的函数移到业务逻辑ode中,而不是尝试执行t通过触发器。@tbrown好的,您有订单。\u否,所以将触发器放在您的订单行表上,并让它在插入或更新时更新订单行。这应该可以工作。这意味着在插入订单行之前,需要先创建初始订单行,但它应该可以工作。@jschoesn:谢谢,但订单行是一个桥接表因此,基本上,每次在订单和产品上插入时,orderline表都应该更新。
Error(3,26): PLS-00049: bad bind variable 'NEW.QTY'

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