2014-01-16 159 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_enddate_new date -1。開始日期可以是今天的日期,但結束日期必須在前一天顯示。SQL Oracle觸發器更改日期

回答

0

因爲突變表問題,所有觸發器的拳頭無法工作。您不能通過觸發DML(如果觸發器不是自治的,但是這是危險和異常情況)來更改行級觸發器中的DML或查詢。如果我理解你的問題,你想保留對股票進行更改的歷史。最好的方法是創建PL/SQL包,將邏輯嵌入到過程中並將此接口提供給最終用戶或其他程序。

+0

我只是想創建一個觸發器,它會在發佈新值時將date_end替換爲new date_start -1。 – user3202908

+0

>>會將date_end替換爲新的date_start -1 - 確定,但在WHAT ROW中?看着你的觸發器,我想你正試圖將全新的記錄添加到同一張表中。使用觸發器這是不可能的。您能否從業務角度澄清您的要求,而不是技術要求? –

+0

我有一個表shares_amount。它包含由公司發佈的數據共享,它的id,開始日期和結束日期等。我想要做的是創建一個觸發器,它會在該表上插入一個插入表之前更新shares_amount表,以便在公司聲明新的金額時的可用股份,當前列出的有效條目的結束日期設置爲新條目開始日期之前的一天。 – user3202908