在 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 需要用函数名限定或以不同的方式命名形参。名称解析自下而上进行,这意味着您的查询认为anotherrmtq 表中列的名称,而不是形参的名称。 尝试将函数参数命名为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 函数中选择子句返回错误值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL:在 SAMPLE 子句中使用变量时出现语法错误

PL/SQL 函数返回错误结果

PL/SQL 和条件 FROM 子句

oracle pl/sql 函数

从 PL/SQL 函数访问查询的 from 子句中的表名

oracle 形式:pl/sql 中 where 子句中的 max 子句