调用 oracle 10g 包内的过程

call procedure which is inside a package in oracle 10g

如何在 oracle 10g 中调用包内的过程。 我有一个名为 "area" 的两个过程,它有一个参数,另一个也是 "area" 但有 3 个参数。简而言之,程序在包 "shapearea".

内超载
create or replace package shapearea is
procedure area(l in number);
procedure area(l in number,b in number,h in number);
end;


create or replace package body shapearea is

 procedure area (l in number) is
 begin
    dbms_output.put_line('Area of '||'l'||' lengh circle is'||l*l);
 end;

procedure area (l in number,b in number,h in number) is
 begin
    dbms_output.put_line('Area of '||'l'||' lengh ractangle is'||l*b*h);
 end;

end;

我试过了

execute shapearea.area(5);
exec shapearea.area(5);
call shapearea.area(5);
shapearea.area(5);

但它在 oracle 10g 中不起作用。

如果您使用的是 SQL*Plus,请尝试:

set serveroutput on
Begin
  shapearea.area(5);
end;
/

如果您使用的是 SQL Developer,您需要显示 DBMS_Output window 并为您正在使用的连接启用它。

DBMS_OUTPUT 实际上不会自己写入您的显示器。实际上它只是将输出缓冲到一些内部数据结构,然后在 SQL*Plus 的情况下,SET SERVEROUTPUT ON 使客户端例程能够检索输出。在 SQL 开发人员显示 DBMS 输出 window 并为您正在使用的连接启用它的情况下,启用它的客户端显示例程。

对于其他环境,您可能需要使用 GET_LINE and/or GET_LINES DBMS_OUTPUT functions.

以编程方式读出缓冲结果