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

发布于 2024-12-21 17:35:34 字数 715 浏览 3 评论 0原文

我在使用 dbms_output.put_line() 命令时遇到问题。

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

Fehler(15,5):please-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:代码还不完善。

I have a problem with the command dbms_output.put_line().

I have a variable pres_name and I would like to print the value on the screen. Therefore I use dbms_output.put_line() but the command doesn't accept this type of Variable but all sites that I found they use it like dbms_output.put_line(varchar variable).
But I get this warning:

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

In English:

wrong quantity or types of arguments on the invocation of put

I use Oracle sql developer.

The code:

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: the code is not perfect yet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

向地狱狂奔 2024-12-28 17:35:34
<snip>
for pr_name in pres loop
    dbms_output.put_line(pr_name);
end loop;
<snip>

在 PL/SQL 中,循环游标隐式声明循环变量是与光标行匹配的记录类型。因此,循环内的 pr_name 是一条具有单个字段 vice_pres_name 的记录。该字段的类型为 vice_pres_name%TYPE。此内部 pr_name 遮蔽了外部 pr_name 参数。 DBMS_OUTPUT.PUT_LINE 采用 varchar2,并且 PL/SQL 无法隐式转换 pr_name 记录。

下面是一个匿名示例,它使用游标 for 循环和记录语法来打印游标返回的值:

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 循环会隐式为您打开和关闭游标。

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

In PL/SQL a cursor for loop implicitly declares the loop variable to be a record type matching a row of the cursor. So, within the loop pr_name is a record with a single field, vice_pres_name. That field has type vice_pres_name%TYPE. This inner pr_name shadows the outer pr_name argument. DBMS_OUTPUT.PUT_LINE takes a varchar2 and PL/SQL is not able to implicitly convert the pr_name record.

Here is an example anonymous that uses an cursor for loop and the record syntax to print the values returned by a cursor:

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.

Also note, that a cursor for loop implicitly opens and closes the cursor for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文