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'