質問
I型数の列を含むテーブルを有する
create table tmp (
/*other fields*/
some_field Number
)
とPL SQLスクリプトでは、私はvarchar型にそのフィールドを変換したいです。しかし、私は、その長さを知らない私は例外を取得して
例外メッセージORA-06502であります: PL / SQL:数値または値のエラー: 文字列バッファが小さすぎます。
v_some_field varchar(21);
/*...*/
v_some_field := TO_CHAR(some_field,'999999999999999999999');
どのように私はv_some_fieldバッファを宣言する必要がありますか? VARCHAR(32767)に設定すると、
?任意の代替があり、かなりブルートようです解決
数が多すぎるではないので、あなたは、エラーを取得しているあなたのto_char
の結果は、(符号のための21X「9」+ 1文字)長い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
他のヒント
あなたは整数と小数の桁に負の値を変換し、変換後のVARCHAR2の最大の長さを決めることができます:
set serveroutput on
declare
n number;
begin
n := -4/3;
dbms_output.put_line(length(to_char(n)));
end;
/
出力は、私にとっては41です。
所属していません StackOverflow