Oracle触发器使用case语句创建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle触发器使用case语句创建相关的知识,希望对你有一定的参考价值。

我在oracle中创建触发器时遇到问题,我有一个表“ stock”。我有字段“ xxx”,“ yyy”和“ zzz”。我想创建一个触发器,可以在插入或更新后立即填充此“股票”表上的另一个字段。我已经有点累了,但是我不能。

 create or replace 
Trigger Connector_Stock_Trg 
AFTER INSERT OR UPDATE OF xxx,yyy,zzz ON STOCK
For Each Row 
Declare 
L_Temp VARCHAR2(64);
BEGIN
L_Temp := Case  
         When Xxx Is Not Null Then Xxx
         When yyy Is Not Null And zzz Is Not Null Then yyy||'_'||zzz
         When Yyy Is Null And zzz Is Not Null Then zzz
         WHEN zzz IS NULL AND yyy IS NOT NULL THEN yyy
   END;

   Update Stock 
   SET CONNECTOR=L_Temp;
END;
答案

您不必更新表STOCK,而只需按以下方式向:NEW.CONNECTOR分配一个表达式。

CREATE OR REPLACE TRIGGER CONNECTOR_STOCK_TRG AFTER
    INSERT OR UPDATE OF XXX, YYY, ZZZ ON STOCK
    FOR EACH ROW
--DECLARE
--    L_TEMP   VARCHAR2(64);
BEGIN
    :NEW.CONNECTOR := -- USE :NEW
        CASE
            WHEN XXX IS NOT NULL THEN XXX
            WHEN YYY IS NOT NULL AND ZZZ IS NOT NULL THEN YYY
                                                          || '_'
                                                          || ZZZ
            WHEN YYY IS NULL AND ZZZ IS NOT NULL THEN ZZZ
            WHEN ZZZ IS NULL AND YYY IS NOT NULL THEN YYY
        END;

--    UPDATE STOCK
--    SET
--        CONNECTOR = L_TEMP;

END;
/

干杯!

以上是关于Oracle触发器使用case语句创建的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 创建触发器语句失败,内部错误代码 ORA-00600

Oracle SQL - 使用 Case 语句缺少关键字错误的更新查询

ORACLE 触发器里面执行建表语句不成功,求解!!!

CASE 语句 [Oracle/SQL]

Oracle的PL_SQL的异常处理

在 oracle 的另一个 case 语句中使用 case 语句的结果