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

Kirim email ke