#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'
), как у вас есть в настоящее время.