函数内的参数错误(oracle)

Wrong arguments inside function (oracle)

我有基本功能:

create or replace function t_owner(tname in varchar2, oname out varchar2)
return varchar2
is
begin
  select owner into oname from table where table_name = 'tname';
  return oname;
end;

select t_owner('table_test') from dual;

当我调用它时,我得到了这个:

ORA-06553: PLS-306: 调用 'T_OWNER'

时参数的数量或类型错误

函数不应该有 OUT 参数;无论如何,他们 return 这个值。所以:

create or replace function t_owner(tname in varchar2)
  return varchar2  
is
  oname table.owner%type;       --> declare a local variable which will be returned
begin
  select owner into oname from table where table_name = tname;
  return oname;
end;

如果要使用OUT参数,切换到程序:

create or replace procedure t_owner(tname in varchar2, oname out varchar2)
is
begin
  select owner into oname from table where table_name = tname;
end;

你可以称它为

declare
  l_out table.owner%type;
begin
  t_owner('table_test', l_out);
  dbms_output.put_line(l_out);
end;

oname 应该是局部变量,而不是输出参数,tname 不应作为字符串引用,而是作为输入参数引用。

create or replace function t_owner(tname in varchar2)
return varchar2
is
    oname table.owner%type;
begin
    select owner into oname 
    from table 
    where table_name = tname;

    return oname;
end;

select t_owner('table_test') from dual;

一个函数是一个returns单值的子程序,它隐含地returns只有一个输出值,所以,不需要定义为参数,已经指出使用 return 关键字输出。因此,您需要去掉第二个参数并将其转换为局部变量:

create or replace function t_owner( tname mytable.table_name%type )
 return mytable.owner%type
is
  oname mytable.owner%type;
begin
  select owner into oname from mytable where table_name = tname;
  return oname;
end;

此外

  • 删除 select 语句中变量 tname 的引号,否则参数的存在将没有意义。因为不会用。
  • 将变量显式定义为<table_name>.<column_name>%type以强调它们定义的内容,并反对相关table的数据类型或长度可能发生的概率。
  • 作为保留关键字,我将 table 替换为 mytable