表A有很多记录,并且在持续增长。
其中有个字段“total”是varchar2型的,其形式为5个数字加1个字符,如“12345P”,最后的字符要么是“P”要么是“N”。
现在我在表A中新建了一个number型的字段“total_num”,想将“total”里的字段转换为number并存入“total_num”,要求是:
1、如果字符为“P”,则转为正数,否则转为负数,例如,“12345P”转为“12345”,而“12345N”转为“-12345”;
2、除了将现有数据转换完外,还需要满足在插入或更新表A时能自动完成上述转换。
这样的trigger应该怎么写啊?
其中有个字段“total”是varchar2型的,其形式为5个数字加1个字符,如“12345P”,最后的字符要么是“P”要么是“N”。
现在我在表A中新建了一个number型的字段“total_num”,想将“total”里的字段转换为number并存入“total_num”,要求是:
1、如果字符为“P”,则转为正数,否则转为负数,例如,“12345P”转为“12345”,而“12345N”转为“-12345”;
2、除了将现有数据转换完外,还需要满足在插入或更新表A时能自动完成上述转换。
这样的trigger应该怎么写啊?
1和2 两个逻辑一样,1直接用存储过程更新,2用触发器
我是oracle新手,不大了解其trigger和procedure,现在急着实现该功能,作为前台应用程序的补充,还望大侠能给些示例,我好照猫画虎。
--更新已有的
UPDATE A
SET TOTAL_NUM = DECODE(SUBSTR(TOTAL,6,1),
'P',TO_NUMBER(SUBSTR(TOTAL_NUM,1,5)),
'N',-1*TO_NUMBER(SUBSTR(TOTAL_NUM,1,5)),NULL);--触发器控制后来的
CREATE OR REPLACE TRIGGER A_TRIGGER
BEFORE INSERT ON A
FOR EACH ROW
BEGIN
IF SUBSTR(:NEW.TOTAL,6,1)='P' THEN
:NEW.TOTAL_NUM := TO_NUMBER(SUBSTR(TOTAL,1,5));
ELSIF SUBSTR(:NEW.TOTAL,6,1)='N' THEN
:NEW.TOTAL_NUM := -1*TO_NUMBER(SUBSTR(TOTAL,1,5));
ELSE
NULL;
END IF;
END;