2009-10-19 4 views
1

숫자Oracle - 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의 결과는 (부호에 대한 21 배 "9"+ 하나 개의 문자) 22 자이기 때문에 :

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이다.

관련 문제