首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >oracle EBS中的PL/SQL函数

oracle EBS中的PL/SQL函数
EN

Stack Overflow用户
提问于 2014-04-01 01:27:37
回答 3查看 308关注 0票数 0

您好,我是oracle Ebs的新手。我遇到了一个pl/sql函数,它可以检查i采购中的变量是否符合指定的列表。我不确定SELECT 'Y'是如何编写的。

代码语言:javascript
运行
复制
function if_it (header_id NUMBER) RETURN CHAR IS

  x_it CHAR(1);
begin

SELECT DISTINCT if_it
into x_it 
FROM ( 
SELECT 'Y' if_it
FROM po.po_requisition_lines pr
where nvl(to_number(pr.attribute1), 0) IN (1,2,3) 
and pr.requisition_header_id = header_id
UNION 
SELECT 'N' is_it FROM DUAL);

return x_it;

exception when others then -- returned Yes and No, so we want to retyurn Yes
    return 'Y';
end if_it;
EN

回答 3

Stack Overflow用户

发布于 2014-04-01 05:25:11

当数据pr.attribute1行等于1、2或3时,您将'Y‘别名为if_it。并且pr.requisition_header_id = header_id。因此,每当在po.po_requisition_lines pr表中这两件事为真时,您就选择了一个硬编码值'Y‘。然后选择'N‘并将其别名为is_it。因此,如果您传入的header_idpo.po_requisition_lines pr表中的pr.requisition_header_id不匹配,那么您的Select Distinct将只返回'N‘。如果你的header_id确实匹配,你会得到一个'Y‘和'N’。

票数 0
EN

Stack Overflow用户

发布于 2014-04-01 06:00:20

当且仅当attribute1在(1,2,3)中的po.po_requisition_lines中没有记录的requisition_header_id等于给定参数header_id时,该函数才返回'N‘。定义有点过于复杂(可以更简单)。

整个select返回以下两种结果之一:

代码语言:javascript
运行
复制
N

代码语言:javascript
运行
复制
Y
N

但后者会引发异常,因为有into子句(它只希望返回单行)。

内部select: similar,只是可能有几条记录使用Y。(外部select使用distinct子句删除重复项)。

票数 0
EN

Stack Overflow用户

发布于 2017-07-20 03:25:51

解决方案:

代码语言:javascript
运行
复制
function if_it (p_header_id NUMBER) RETURN VARCHAR2 IS
begin
FOR cur IN (SELECT NULL FROM DUAL
              WHERE EXISTS 
              (SELECT NULL
                FROM po.po_requisition_lines pr
                where nvl(to_number(pr.attribute1), 0) IN (1,2,3) 
                and pr.requisition_header_id = p_header_id)
            ) LOOP
  RETURN 'Y';
END LOOP;
RETURN 'N'; 

end if_it;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22768229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档