2014-01-16 8 views
0
CREATE OR REPLACE TRIGGER shares_to_amount 
AFTER INSERT OR UPDATE OF issued ON shares_amount 
FOR EACH ROW 
BEGIN 
    INSERT INTO shares_amount(
    share_issue_id, 
    share_id, 
    issued, 
    date_start, 
    date_end 
) VALUES ( 
    :OLD.share_issue_id, 
    :OLD.share_id, 
    :NEW.issued, 
    :NEW.date_start, 
    :((NEW.date_start)-1).date_end 
    ); 
END; 

Я хочу, чтобы изменить date_end к date_new date -1, когда новое значение доли выдается в «выдан». Дата начала может быть сегодняшней датой, но дата окончания должна будет отображаться за день до этого.SQL Oracle Триггер изменить дату

ответ

0

Кулак всего вашего триггера не может работать из-за проблемы с изменением таблицы. Вы не можете выполнять DML или запросы в триггерах на уровне строки снова в таблице, которая изменяется путем запуска DML (если триггер не является автономным, но это опасно и случай исключительной ситуации). Если я правильно понимаю ваш вопрос, вы хотите сохранить историю изменений, сделанных для акций. Лучше всего создать PL/SQL-пакет, инкапсулировать логику в процедуры и предоставить этот интерфейс конечным пользователям или другим программам.

+0

Я просто хочу создать триггер, который заменит date_end на New date_start -1, когда новое значение будет выпущено для выпуска. – user3202908

+0

>> заменит date_end на New date_start -1 - ОК, но в WHAT ROW? Глядя на триггер, я думаю, вы пытаетесь добавить новый рекорд в ту же таблицу. Это невозможно с помощью триггера. Можете ли вы прояснить свои требования с деловой точки зрения, а не технические? –

+0

У меня есть таблица share_amount. Он содержит долю данных, выпущенную компанией, ее идентификатор, дату начала и окончания и т. Д. Что я хочу сделать, так это создать триггер, который будет обновлять таблицу share_amount, прежде чем появится вставка в этой таблице, чтобы когда компания объявляет новую сумму доступных акций, действующая в настоящий момент действительная запись имеет дату окончания, установленную за день до даты начала новой записи. – user3202908

Смежные вопросы