在 pl/sql 函数中选择子句返回错误值
Posted
技术标签:
【中文标题】在 pl/sql 函数中选择子句返回错误值【英文标题】:Select clausule inside pl/sql function return wrong value 【发布时间】:2016-08-16 18:15:43 【问题描述】:当我这样做时:
select sum(m.mot)
from rmtq mq
join rmo m on mq.id = m.id
where mq.another = 138;
返回值 = 2,这是正确的。但是当我把这段代码放在一个函数中时:
create or replace function get(another in number) return number
is ret number := 0;
begin
select sum(m.mot)
into ret
from rmtq mq
join rmo m on mq.id = m.id
where mq.another = another
return(ret);
end;
我打电话给:
exec dbms_output.put_line(get(138));
返回值 = 39,这是不正确的。 39 是多少?
【问题讨论】:
another
需要用函数名限定或以不同的方式命名形参。名称解析自下而上进行,这意味着您的查询认为another
是rmtq
表中列的名称,而不是形参的名称。
尝试将函数参数命名为another_in
,这样您就知道它是IN
参数。
Related question 带有解释您所看到内容的文档链接。
【参考方案1】:
cmets 的质疑是正确的;以免有人在此浪费时间,您必须正确编写参数名称,例如:
create or replace function get(p_another in number) return number
is ret number := 0;
begin
select sum(m.mot)
into ret
from rmtq mq
join rmo m on mq.id = m.id
where mq.another = p_another
return(ret);
end;
【讨论】:
以上是关于在 pl/sql 函数中选择子句返回错误值的主要内容,如果未能解决你的问题,请参考以下文章