2015-12-02 55 views
0

我有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的最後一位數字。

+2

有什麼'mysql'got做你的問題? –

回答

0

要確定一個數字的最後一個數字,你可以這樣做

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

好運。

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; 
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.集成到這個你的觸發器應該非常簡單。