как конвертировать varchar2 в число в оракуле? - PullRequest
1 голос
/ 13 августа 2011

У меня есть таблица с множеством записей, и она продолжает расти:

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

Поле «итого», состоящее из 5 цифр и 1 символа, например «12345p», символ либо «p»или "N".

Теперь я хочу написать триггер для преобразования существующего «итога» в числа и сохранения их в «total_num».более того, если есть операции вставки или обновления, он может автоматически завершить это преобразование, и он должен удовлетворять следующему условию:

, если символ «p», число положительное, например «12345p»."преобразуется в" 12345 ", в противном случае число является отрицательным.например, «12345N» преобразуется в «-12345».

Как записать этот триггер?

1 Ответ

6 голосов
/ 13 августа 2011

Попробуйте это

(не проверено, поскольку у меня нет соединения оракула в данный момент)

  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;
...