在Oracle PL / SQL中使用dbms_output.put_line时,参数的数量或类型错误

时间:2011-12-16 17:10:41

标签: sql oracle plsql oracle-sqldeveloper

我遇到了dbms_output.put_line()命令的问题。

我有一个变量pres_name,我想在屏幕上打印这个值。因此我使用dbms_output.put_line()但该命令不接受此类型的变量,但我发现他们使用的所有网站都像dbms_output.put_line(varchar variable)一样。 但是我得到了这个警告:

  

Fehler(15,5):请-00306:Falsche Anzahl oder Typen von Argumenten in Aufruf von'PUT'

英文:

  

调用put

的参数数量或参数类型错误

我使用的是Oracle sql developer。

代码:

create or replace
procedure ex10_1
(
 pr_name varchar
)
as
cursor pres is select vice_pres_name from admin_pr_vp;
begin
  open pres;
  for pr_name in pres loop
    dbms_output.put_line(pr_name);
  end loop;
end;

ps:代码还不完善。

1 个答案:

答案 0 :(得分:5)

<snip>
for pr_name in pres loop
    dbms_output.put_line(pr_name);
end loop;
<snip>

在PL / SQL中,cursor for loop隐式声明循环变量是与游标行匹配的记录类型。因此,在循环内pr_name是一个包含单个字段vice_pres_name的记录。该字段的类型为vice_pres_name%TYPE。内部pr_name会影响外部pr_name参数。 DBMS_OUTPUT.PUT_LINE采用varchar2,PL / SQL无法隐式转换pr_name记录。

这是一个匿名示例,它使用游标进行循环,并使用记录语法来打印游标返回的值:

SQL>     declare
  2          cursor pres is select 'A' as vice_pres_name
  3              from dual union all select 'B' from dual;
  4      begin <<ex10_1>>
  5          for pr_name in pres loop
  6              dbms_output.put_line(pr_name.vice_pres_name);
  7          end loop;
  8      end ex10_1;
  9  /
A
B

PL/SQL procedure successfully completed.

另请注意,for循环的游标会隐式打开和关闭游标。