2009-10-19 62 views
1

我有一個包含數字類型甲骨文 - 數量爲varchar

create table tmp (
    /*other fields*/ 
    some_field Number 
) 

,並在PL SQL腳本的列的表,我想那場轉換爲VARCHAR。但是,我不知道它的長度,所以我得到一個異常

Exception message is ORA-06502: PL/SQL: numeric or value error: character string buffer too small

v_some_field varchar(21); 
/*...*/ 
v_some_field := TO_CHAR(some_field,'999999999999999999999'); 

我應該如何申報v_some_field緩衝區?將它設置爲varchar(32767)似乎很蠻橫,有沒有其他選擇?

回答

8

你得到一個錯誤不是因爲數量太大,而是因爲你的to_char的結果是長22個字符(21倍「9」 +一個符號字符):

SQL> DECLARE 
    2  some_field NUMBER := 123; 
    3  v_some_field VARCHAR(21); 
    4 BEGIN 
    5  v_some_field := TO_CHAR(some_field, '999999999999999999999'); 
    6 END; 
    7/

ORA-06502: PL/SQL: numeric or value error: character string buffer too small 
ORA-06512: at line 6 

SQL> DECLARE 
    2  some_field NUMBER := 123; 
    3  v_some_field VARCHAR(22); 
    4 BEGIN 
    5  v_some_field := TO_CHAR(some_field, '999999999999999999999'); 
    6 END; 
    7/

PL/SQL procedure successfully completed 
0

你可以通過將負的值與整數和小數數字​​確定轉換後的varchar2的最大長度:

set serveroutput on 
declare 
    n number; 
begin 
    n := -4/3; 
    dbms_output.put_line(length(to_char(n))); 
end; 
/

輸出是41箱。