如何用case创建触发器

时间:2015-12-02 11:30:20

标签: mysql oracle triggers

我有oracle 11g db.i想要在名为GG_TEST_SMS_LOG的表上创建一个触发器。该表有一列名为SMS_LOG_ORIG。其中存在10位数字值。

现在我想要在表GG_TEST_SMS_LOG中插入一个新行,如果列值SMS_LOG_ORIG的最后一位数字是1,那么行将被插入另一个名为GG1_TEST_SMS_LOG的表中。

像这样,我们有10个表GG<N>_TEST_SMS_LOG。其中N值为0到9.新行应插入另一个表中,具体取决于列值SMS_LOG_ORIG的最后一位数。

3 个答案:

答案 0 :(得分:0)

要确定数字的最后一位数,您可以执行类似

的操作
DECLARE
  cLast_digit  CHAR(1);
  n            NUMBER := 12345;
BEGIN
  cLast_digit := SUBSTR(TO_NUMBER(n), -1);
END;

祝你好运。

答案 1 :(得分:0)

Hope this code snippet illustrates the problem discussed. Let me know if this helps.

CREATE OR REPLACE TRIGGER "AVROY"."TRI_CHCK_TRIGGER" AFTER
  INSERT OR
  UPDATE ON TRI_CHCK FOR EACH ROW DECLARE LV_ERR_CODE_OUT NUMBER;
  LV_ERR_MSG_OUT VARCHAR2(2000);
  BEGIN
    IF SUBSTR(:new.ID_NO,LENGTH(:NEW.ID_NO),LENGTH(:NEW.ID_NO)) = 1 THEN
      INSERT INTO EMP
        (EMPNO
        ) VALUES
        ( :new.ID_NO
        );
    ELSIF SUBSTR(:new.ID_NO,LENGTH(:NEW.ID_NO),LENGTH(:NEW.ID_NO)) = 2 THEN
      INSERT INTO EMP_V1
        (EMPNO
        ) VALUES
        ( :new.ID_NO
        );
    END IF;
  END;

答案 2 :(得分:0)

获取最后一位数字的简单方法是使用MOD()

with v_data(pk) as (
  select 100000+level 
  from dual
  connect by level <= 10
)
select pk, mod(pk, 10) from v_data

所以,你所要做的就是使用MOD(<column name>, 10) = 1检查最后一个数字是否为1.将它集成到你的触发器应该非常简单。