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'
答案 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”。
如果您清理所有代码 双引号,然后你的问题 应该消失。