我遇到了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:代码还不完善。
答案 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循环的游标会隐式打开和关闭游标。