質問

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です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top