函数内的参数错误(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
。
我有基本功能:
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
。