sql - 从包(oracle、sql)调用函数时参数的数量或类型错误
问题描述
所以,我在一个包中得到了两个同名的函数。
create or replace package body employee_pkg
as
function fullname(
last_in employees.last_name%type,
first_in employees.first_name%type
)
return fullname_t
is
begin
return last_in || ', ' || first_in;
end;
function fullname(employee_id_in in employees.employee_id%type)
return fullname_t
is
l_fullname fullname_t;
begin
select fullname(last_name, first_name) into l_fullname
from employees
where employee_id = employee_id_in;
return l_fullname;
end;
end employee_pkg;
/
Fun1:获取姓氏和名字(参数)并返回全名
Fun2:获取 ID -> 从 ID 所在的表中获取姓氏和名字并返回全名
,并且每次我尝试调用该函数时都会收到错误消息:
PLS-00306:调用“全名”时参数的数量或类型错误
我尝试像这样调用函数:(使用姓氏和名字的方法)
declare
last_in employees.last_name%type;
first_in employees.first_name%type;
begin
last_in := 'Lastname';
first_in := 'Firstname';
employee_pkg.fullname(last_in, first_in);
end;
/
也像这样:(带有ID的方法)
declare
eID employees.employee_id%type;
begin
eID := 1;
employee_pkg.fullname(eID);
end;
/
为了测试它,我使用 HR 用户。
在我看来,一切都应该按预期工作,但显然有些地方是错误的,我试图弄清楚问题是什么,一段时间就知道了。
提前感谢您帮助我找到解决问题的方法。
PS:代码片段来自 Steven Feuerstein 撰写的甲骨文杂志的一篇文章。 关联
解决方案
在你的包体中,这两个定义fullname
都是FUNCTIONS所以返回的值在被调用时需要存储在一个变量中。
当您调用这些过程时,请尝试像这样调用它们:
DECLARE
last_in employees.last_name%TYPE;
first_in employees.first_name%TYPE;
eID employees.employee_id%TYPE;
l_full_name fullname_t;
BEGIN
last_in := 'Lastname';
first_in := 'Firstname';
l_full_name := employee_pkg.fullname (last_in, first_in);
eID := 1;
l_full_name := employee_pkg.fullname (eID);
END;
/
推荐阅读
- ios - 我可以使用 ios Framework CallKit 在 iPhone 内置电话 aap 中显示被叫名称吗?
- java - Firebase .removeValue() 自动添加已删除的元素
- java - 为什么线程“main”java.util.NoSuchElementException中出现此错误异常:
- c# - 将 cookie 从当前 HttpContext 传输到新创建的 HttpClient 请求的简单方法
- android - 通知图标有时会变灰,但有时会起作用
- ruby-on-rails - rails-vim 状态行在生成资源后显示 `(1 of n): create`
- matlab - 如何在球面上生成一个随机点?
- python - 蟒蛇钥匙。钥匙
- python - discord.py 向频道发送错误
- java - Apache Ignite:胖客户端阻塞等待初始化锁定