1

pl/sql の自己定義変数に多数の列を選択する必要がある select ステートメントがあります。以下のように:

  select col1,
         col2,
         ....
         col30
  into   var1,
         ...
         var30
  from   table
  where ....

SP の実行中に次のエラーが発生します。

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます

エラー情報は、select ステートメントの最初の行番号のみを示します。定義された変数が小さすぎて列を保持できないことがわかったとしても、エラーで定義された変数を正確に見つけることは依然として困難です。これは、この sp をデバッグする効率的な方法ではありません。

何か良いアイデアはありますか、アドバイスをお願いします。

4

1 に答える 1

5

pl/sql では通常、次の 2 つのオプションが使用されます。

1. %type を使用して、テーブルの定義と一致するように PL/SQL で変数を定義します。

define
  v_col1 my_table.col1%type;
  v_col2 my_table.col2%type;
begin
  select col1,col2
  into v_col1, v_col2
  from my_table
  -- some condition that pulls 1 row
  where rownum = 1;
end;

2.%rowtype を使用して、行変数を定義します。

define
  v_my_table_row my_table%rowtype;
begin
  select *
  into v_my_table_row
  from my_table
  where rownum = 1;

end;
于 2012-06-29T11:45:01.613 に答える