Oracle Trigger更新列在同一个表中

时间:2015-09-23 04:14:12

标签: sql oracle triggers

我有一个叫M_StockCode_JB的表。其字段为CodeDescriptionDisplay

显示仍为空,但代码和描述的值如下:

  M_StockCode_JB
-----------------------
Code    |   Description
1       |   Apple
2       |   Banana
3       |   Pinneaple

我想添加名为'Display'的列,其中包含Code和Description中的数据,我打算使用此SQL SELECT "NAME" ||'-' || DESCRIPTION FROM M_STOCKCODE_JB,因此它将生成如下:

                M_StockCode_JB
    ------------------------------------------
    Code    |   Description    |   Display
    1       |   Apple          |   1-Apple
    2       |   Banana         |   2-Banana
    3       |   Pineapple      |   3-Pineapple

当我添加列代码和描述时,如何插入显示列?

1 个答案:

答案 0 :(得分:2)

如果您的展示广告专栏只包含"NAME" ||'-' || DESCRIPTION,并且您使用的是Oracle 11G或更高版本,则可以创建虚拟列

ALTER TABLE M_StockCode_JB ADD (Display AS (NAME ||'-' || DESCRIPTION))

在任何版本中,您都可以创建视图

CREATE OR REPLACE VIEW V_M_StockCode_JB AS
SELECT "NAME" ||'-' || DESCRIPTION FROM M_STOCKCODE_JB

如果列需要可更新,那么您需要带有触发器的实列

ALTER TABLE M_StockCode_JB ADD (Display VARCHAR2(4000));
CREATE OR REPLACE TRIGGER M_StockCode_JB_trig
  BEFORE
    INSERT ON M_StockCode_JB 
    FOR EACH ROW    
BEGIN
  :new.Display = :new.NAME ||'-' || :new.DESCRIPTION;
END;
/