我有oracle 11g db.i想要在名为GG_TEST_SMS_LOG
的表上创建一个触发器。该表有一列名为SMS_LOG_ORIG
。其中存在10位数字值。
现在我想要在表GG_TEST_SMS_LOG
中插入一个新行,如果列值SMS_LOG_ORIG
的最后一位数字是1,那么行将被插入另一个名为GG1_TEST_SMS_LOG
的表中。
GG<N>_TEST_SMS_LOG
。其中N值为0到9.新行应插入另一个表中,具体取决于列值SMS_LOG_ORIG
的最后一位数。
答案 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.将它集成到你的触发器应该非常简单。