正如错误所暗示logmessage
的,这不是一个程序。这是一个功能。当函数返回一些东西时,你需要将它分配给一个变量。你知道它logmessage
返回一个数字,所以你需要声明一个变量来放入这个返回值。
create or replace package body test_erp AS
procedure init_data is
l_success number;
begin
l_message := logMessage('procedure init_data');
dbms_output.put_line(to_char(l_success));
end init_data;
end test_erp;
/
但是,看起来实际上应该是一个程序logmessage
。我假设您正在执行 DML 语句(更新/插入)。除非是这种情况,否则在语句中使用函数调用select
,这意味着总是有可能发生错误。如果logmessage
是一个过程,您可以声明一个out
参数来告诉调用过程是否一切正常;类似于以下内容:
create or replace procedure logmessage( msg in varchar2, success out number) is
begin
insert into logs values(msg);
success := 1;
exception when others then
success := 0;
end logmessage;
然后,您可以按如下方式调用它:
create or replace package body test_erp AS
procedure init_data is
l_success number;
begin
logMessage('procedure init_data', l_success);
dbms_output.put_line(to_char(l_success));
end init_data;
end test_erp;
/
如果logmessage
不打算在包装外使用,test_erp
我会把它放在包装内;它使命名空间保持清洁并避免它被错误地用作另一个包/调用等。