如何在oracle中将varchar2转换为数字?

时间:2011-08-13 14:39:15

标签: oracle triggers numbers varchar

我有一张包含许多记录的表,并且还在继续增长:

  table T_A
  { 
    total varchar2(10),
    total number
  }

"总计"由5个数字和1个字符组成的字段,例如" 12345p",角色是" p"或" N"。

现在,我想写一个触发器来转换现有的"总数"数字并将它们存储在" total_num"中。此外,如果有插入或更新操作,它可以自动完成此转换,并且必须满足以下条件:

  

如果角色是" p",则该数字为正数,例如" 12345p"   转换为" 12345"否则,该数字为负数。例如   " 12345N"转换为" -12345"。

如何编写此触发器?

1 个答案:

答案 0 :(得分:6)

试试这个

(未测试,因为我目前没有oracle连接)

  CREATE OR REPLACE TRIGGER trg_ta_totals
  BEFORE INSERT OR UPDATE ON T_A
  FOR EACH ROW

    DECLARE
        vnum number;
    BEGIN

    IF instr(:NEW.total,'p') > 0 THEN
       vnum:=TO_NUMBER(SUBSTR(:NEW.total,0,LENGTH(:NEW.total)-1));     
    ELSIF instr(:NEW.total,'N') > 0 THEN
       vnum:=TO_NUMBER(SUBSTR(:NEW.total,0,LENGTH(:NEW.total)-1))*-1;
    END IF; 

    :NEW.total_num := vnum; 

    END;