1

我有一个 select 语句,需要在我的 pl/sql 中选择几十列到自定义变量中。如下所示:

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

执行 SP 时遇到错误:

ORA-06502: PL/SQL: 数字或值错误: 字符串缓冲区太小

错误信息只指出 select 语句的第一行号。即使我可以发现我定义的变量太小而无法容纳列,它仍然让我很难精确定位错误定义的变量。这对我来说不是调试这个 sp 的有效方法。

有没有更好的办法,请指教。

4

1 回答 1

5

pl/sql 中通常使用两个选项:

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 回答