簡體   English   中英

每次插入一行時的SQL更新列

[英]Sql update column every time a row is inserted

好的,所以我有了這個表:具有ID的VersionsEditor-bigint版本-整數startdate-日期endDate-日期bookId-整數

我的問題:當我為某本書插入新行時,endDate值必須為“進行中”。 因此,我認為我不能將日期作為列類型。邏輯是當我擁有某本書的最高版本時,那么endDate必須為“進行中”

為什么要使用日期列作為狀態? 相反,您需要另一列狀態。 我可能會建議一個觀點:

create view v_book as
    select b.*,
           (case when startDate is null then 'NotStarted'
                 when endDate is null then 'InProgress'
                 else 'Done'
            end) as Status
    from books

那樣的觸發器(Oracle DB)呢?

CREATE OR REPLACE TRIGGER t
  BEFORE
    INSERT OR
    UPDATE OF salary, department_id OR
    DELETE
  ON employees
BEGIN
  CASE
    WHEN INSERTING THEN
      DBMS_OUTPUT.PUT_LINE('Inserting');
    WHEN UPDATING('salary') THEN
      DBMS_OUTPUT.PUT_LINE('Updating salary');
    WHEN UPDATING('department_id') THEN
      DBMS_OUTPUT.PUT_LINE('Updating department ID');
    WHEN DELETING THEN
      DBMS_OUTPUT.PUT_LINE('Deleting');
  END CASE;
END;
/

日期應該是日期,而不是整數或varchar。 如果“進行中”的含義是不能指定任何日期,則在進行中時將其設置為null。 您可以這樣查詢它:

select coalesce( to_char(enddate, 'DD-MM-YYYY') , 'In progress' ) as end_date
from mytable
where ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM