Создание Oracle SQL Trigger Error - PullRequest
0 голосов
/ 15 мая 2018

Вот что мне нужно сделать: создать TRIGGER с именем tgr_customer_insert, который будет запускаться ПОСЛЕ строки, вставленной в таблицу клиентов.Триггер можно создать после создания таблицы владельцев карт, поэтому он может находиться в том же файле ps16a.sql, который только что был создан.Этот триггер вставит строку в таблицу держателей карт, когда строка будет вставлена ​​в таблицу temp_table_customers.Вот столбцы для вставки: номер_карты (это вставляется с использованием порядкового номера держателя seq_card) 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.

Волосы рвутся.Заранее спасибо за ваше время с этим вопросом.

1 Ответ

0 голосов
/ 15 мая 2018

Я думаю, что вам не хватает ':' в 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;
...