触发更新另一个表

发布于 2024-10-20 12:10:03 字数 438 浏览 0 评论 0原文

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'
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;

I am trying to create a trigger that updates orderline table after a new record has been inserted into orders. But I get this error:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流云如水 2024-10-27 12:10:03

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

更新:根据您的评论,无法从 order_no 或 Product_no 或 qty 中获取新值。您期望这些值从哪里来?

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

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

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

If I had to guess the orders table does not have columns named 'order_no' and 'product_no'. I can reproduce the error in that case and get the bind variable message. So what is the orders table column names?

UPDATE: there is nothing to get the new value from for order_no or product_no or for that matter qty according to your comment. Where do you expect the values to come from?

UPDATE: Accordin to your update you have the following columns in the orders table:

order_no,
employee_no,
branch_no,
order_date,
ship_date,
shipping_method,
tax_status,
subtotal,
tax_amt,
shipping_charge,
total_amt,
customer_no

In that list of columns I do not see product_no or qty. Order_no is there though.

清风疏影 2024-10-27 12:10:03

我想我找到了。

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

你无意中发现了原因,
在“甲骨文世界”中通常是
编码用户定义名称的错误形式
双引号内。你看,
每当您在 Oracle 中定义名称时
使用双引号和任何字母
不是大写的字符,那么
您必须始终使用双引号并且
相同的混合大小写配置。如果
你不使用双引号,那么
Oracle 假设无论
你在代码中的情况,你的
Oracle 名称是大写的!

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

如果你清理了所有代码
双引号,那么你的问题
应该消失。

I think I found.

Look here : http://www.tek-tips.com/viewthread.cfm?qid=1556226&page=14

You have inadvertently discovered why,
in the "Oracle World" it is generally
bad form to code user-defined names
within double quotes. You see,
whenever you define a name in Oracle
using double quotes and any alpha
character that is not UPPER CASE, then
you must always use double quotes and
the same mixed-case configuration. If
you do not use double-quotes, then
Oracle presumes that regardless of
your case in the code, that your
Oracle name is uppercase !

So, when your referred, in your code,
to "...INTO :new.user_idx...",
Oracle looks for "USER_IDX", which it
cannot find, since you defined that
column as *"user_idx"* -- "user_idx"
<> "USER_IDX".

If you sanitize your code of all
double quotes, then your problem(s)
should disappear.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文