创建 Oracle SQL 触发器错误
Posted
技术标签:
【中文标题】创建 Oracle SQL 触发器错误【英文标题】:Creating Oracle SQL Trigger Error 【发布时间】:2018-05-15 03:24:42 【问题描述】:这是我需要完成的:创建一个名为 tgr_customer_insert 的触发器,它将在将一行插入到客户表中后触发。 触发器可以在您创建 cardholder 表之后创建,因此它可以在刚刚创建的同一个 ps16a.sql 文件中。当向 temp_table_customers 表中插入一行时,此触发器将向 cardholder 表中插入一行。以下是要插入的列: card_number(这是使用 seq_cardholder 序列号插入的) customer_id(这是 temp_table_customer 表中使用 :new.column_name 语法的绑定变量) credit_limit(这是 temp_table_customer 表中使用 :new.column_name 语法的绑定变量)
这是我的代码:
`CREATE OR REPLACE TRIGGER tgr_customer_insert
AFTER INSERT
ON customers
FOR EACH ROW
BEGIN
-- Insert record into customers table
INSERT INTO cardholder
( card_number,
customer_id,
credit_limit
)
VALUES
( new.seq_cardholder,
:new.customer_id,
:new.credit_limit
);
END;
`
错误是:ORA-24344:编译错误成功 第 3 行位置 4。
头发被扯掉了。提前感谢您抽出时间处理此事。
【问题讨论】:
错误的详细信息是:PL/SQL: SQL 语句被忽略 使用show errors
获取完整的错误信息
【参考方案1】:
我认为您在 INSERT VALUES 中缺少用于第一个值绑定的“:”。
CREATE OR REPLACE TRIGGER tgr_customer_insert
AFTER INSERT
ON customers
FOR EACH ROW
BEGIN
-- Insert record into customers table
INSERT INTO cardholder
( card_number,
customer_id,
credit_limit
)
VALUES
( :new.seq_cardholder,
:new.customer_id,
:new.credit_limit
);
END;
如果“seq_cardholder”是一个序列,那么你必须使用如下:
CREATE OR REPLACE TRIGGER tgr_customer_insert
AFTER INSERT
ON customers
FOR EACH ROW
BEGIN
-- Insert record into customers table
INSERT INTO cardholder
( card_number,
customer_id,
credit_limit
)
VALUES
( seq_cardholder.nextval,
:new.customer_id,
:new.credit_limit
);
END;
【讨论】:
我在发布之前尝试过,但我得到:ORA-24344:编译错误成功 更多细节显示:PLS-00049: bad bind variable 'NEW.SEQ_CARDHOLDER' 没关系,你是对的。这是我创建的序列,您的代码成功创建了触发器。以上是关于创建 Oracle SQL 触发器错误的主要内容,如果未能解决你的问题,请参考以下文章