может ли кто-нибудь помочь мне с проблемой вставки триггера, которую я создал?

#oracle #oracle11g

#Oracle #оракул11g

Вопрос:

поэтому я сделал триггерную вставку вот так:

 create or replace trigger discount after insert on transaction for each row begin if (new.desc_date = 'Y') then insert into desc_transaction(discount) values (new.discount = '0.1'); end if; end; /  

Предупреждение: Триггер создан с ошибками компиляции.

 show error; 3/1 PL/SQL: SQL Statement ignored 3/54 PL/SQL: ORA-00917: missing comma  

как это решить.

данные : desc_date содержит только да и нет, потому что если ноябрь со скидкой, а октябрь-нет. Для раздела скидка содержит 0.1 и null, поэтому, если значение desc_date равно да, то 0.1, в противном случае оно будет равно null или ‘ ‘.

Ответ №1:

Неправильный синтаксис. Должно было быть

 CREATE OR REPLACE TRIGGER discount  AFTER INSERT  ON transaction  FOR EACH ROW BEGIN  IF :new.desc_date = 'Y'  THEN  INSERT INTO desc_transaction (discount)  VALUES (0.1);  END IF; END; /  

Или, возможно, даже лучше,

 CREATE OR REPLACE TRIGGER discount  AFTER INSERT  ON transaction  FOR EACH ROW BEGIN  INSERT INTO desc_transaction (discount)  VALUES (CASE WHEN :new.desc_date = 'Y' THEN 0.1 ELSE NULL END); END; /  

Ответ №2:

Синтаксис вашего insert утверждения неверен. Попробуйте сделать следующее:

 insert into desc_transaction(discount) values ('0.1');  

Примечание сбоку — discount вероятно, это не varchar колонка. Если это предположение верно, вы должны использовать числовой литерал ( 0.1 ), а не строковый литерал ( '0.1' ), как у вас есть в настоящее время.