表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应该怎么写啊?

解决方案 »

  1.   

    没有什么难度啊,SUBSTR函数取最后一个字符,判断,然后将剩下的字符用TO_NUMBER函数,转换为数字即可
    1和2 两个逻辑一样,1直接用存储过程更新,2用触发器
      

  2.   

    感谢楼上的
    我是oracle新手,不大了解其trigger和procedure,现在急着实现该功能,作为前台应用程序的补充,还望大侠能给些示例,我好照猫画虎。
      

  3.   


    --更新已有的
    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;