Kang Oyib wrote:
>
>
> Dear All,
>
> Rekan sekalian, ada yg mengetahui trik untuk membedakan suatu karakter
> menjadi decimal maupun currency, sebelumnya ada rekan yg memberikan
> solusi dengan menggunakan :
>
> to_number(VCHAR, '999G999D99' ,'NLS_NUMERIC_ CHARACTERS = '',.'' ')
>
> saya ada kendala insert, ketika ada record karakter yg berganti2
> settingnya, misal
>
> column1 column2
> record1 = 1.999.999,85 100.00
> record2 = 1,999,999.85 25,00
> record3 = 887,00 10.25
> record4 = 887.00 15,50
>
Karena ini special case, bisa dicoba dengan membuat stored function.
Buat satu format, jika terjadi eksepsi ketika eksekusi tinggal di-catch
eksepsinya dan diganti dengan format yg lain.
Mis:
SQL> CREATE OR REPLACE FUNCTION char_to_num(num_in_char IN VARCHAR2)
RETURN NUMBER IS
2 BEGIN
3 RETURN
TO_NUMBER(num_in_char,'999G999G999G999D99','NLS_NUMERIC_CHARACTERS='',.''
');
4 EXCEPTION
5 WHEN VALUE_ERROR THEN
6 BEGIN
7 RETURN
TO_NUMBER(num_in_char,'999G999G999G999D99','NLS_NUMERIC_CHARACTERS=''.,''
');
8 EXCEPTION
9 WHEN VALUE_ERROR THEN
10 DBMS_OUTPUT.PUT_LINE('Error occurred : No more format available');
11 END;
12 WHEN OTHERS THEN
13 DBMS_OUTPUT.PUT_LINE('Error occurred : '||SQLERRM);
14 END;
15 /
Function created.
SQL> SELECT char_to_num('1.999.999,85') FROM DUAL;
CHAR_TO_NUM('1.999.999,85')
---------------------------
1999999.85
SQL> SELECT char_to_num('1,999,999.85') FROM DUAL;
CHAR_TO_NUM('1,999,999.85')
---------------------------
1999999.85
>
> Terimakasih atas solusinya... .....
>
> 0yib
>
CMIIW,
AH