2011-08-13 125 views
1

我有許多記錄的表,並將其繼續增長:如何將varchar2轉換爲oracle中的數字?

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

「總」場5個號碼和1個字符,例如組成「12345p」,字符是「p」或「N」。

現在,我想寫一個觸發器將現有的「total」轉換爲數字並將它們存儲在「total_num」中。此外,如果有插入或更新的操作,它可以自動完成這種轉換,並且它必須滿足下列條件:

如果字符是「P」時,數是正的,例如「12345p」 轉換爲「12345」,否則該數字爲負數。例如 「12345N」轉換爲「-12345」。

如何寫這個觸發器?

回答

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; 
+1

利於結構... OP不妨做其他檢查,如果他的數據是髒比他認爲的.. :) – Randy

+1

+1 - 我修復你的語法:) – APC

+0

請注意,OP的發佈代碼有一個小寫'p'和大寫'N':'instr()'檢查需要匹配案例。 – APC

相關問題