创建Oracle SQL触发器错误

时间:2018-05-15 03:24:42

标签: sql oracle plsql database-trigger

这就是我需要完成的任务:创建一个名为tgr_customer_insert的TRIGGER,它将在将一行插入customers表后触发。 创建持卡人表后可以创建触发器,因此它可以位于刚创建的同一个ps16a.sql文件中。当一行插入temp_table_customers表时,此触发器将在cardholder表中插入一行。以下是要插入的列: card_number(使用seq_cardholder序列号插入)  customer_id(这是来自temp_table_customer表的绑定变量,使用:new.column_name语法) credit_limit(这是使用:new.column_name语法从temp_table_customer表中绑定变量)

这是我的代码:

`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位。

头发被撕掉了。提前感谢您抽出时间。

1 个答案:

答案 0 :(得分:0)

我认为你在第一个值绑定的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;