为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?
Posted
技术标签:
【中文标题】为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?【英文标题】:Why do I get the "bad bind variable" error when trying to create an INSTEAD OF trigger in PL/SQL Oracle?为什么在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误? 【发布时间】:2019-12-01 18:20:20 【问题描述】:我有这 4 张桌子:
Suppliers( id_sup, name, city)
Products (id_prod, name, city)
Companies (id_co, name, city)
Deliveries (id_sup, id_prod, id_co)
我为 Deliveries 创建了一个名为“v_deliveries”的视图,并且我想创建一个代替触发器,以便如果有人尝试在视图中插入数据,它实际上会将其添加到 Deliveries 表中。这是我尝试过的:
CREATE OR REPLACE TRIGGER new_deliv_trigg
INSTEAD OF INSERT ON v_deliveries FOR EACH ROW
BEGIN
INSERT INTO Deliveries (id_sup, id_prod, id_co)
VALUES (:NEW.id_sup, :NEW.id_prod, :NEW.id_co);
End;
【问题讨论】:
【参考方案1】:您真正使用哪个数据库?因为,对于 Oracle,它可以正常工作:
SQL> create table deliveries (id_sup number, id_prod number, id_co number);
Table created.
SQL> create or replace view v_deliveries as select * From deliveries;
View created.
SQL>
SQL> CREATE OR REPLACE TRIGGER new_deliv_trigg
2 INSTEAD OF INSERT ON v_deliveries FOR EACH ROW
3 BEGIN
4 INSERT INTO Deliveries (id_sup, id_prod, id_co)
5 VALUES (:NEW.id_sup, :NEW.id_prod, :NEW.id_co);
6 End;
7 /
Trigger created.
SQL>
【讨论】:
谢谢!我发现我的错误在哪里。我的视图有不同的列名以上是关于为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?的主要内容,如果未能解决你的问题,请参考以下文章
pl/sql developer中文乱码,为啥呢?怎么解决?Oracle问题
循环在尝试通过 Oracle EBS 中的并发程序使用 PL/SQL 创建 XML 时提前结束