oracle ebs r12报告的Oracle flex值层次结构SQL查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle ebs r12报告的Oracle flex值层次结构SQL查询相关的知识,希望对你有一定的参考价值。
我是oracle和oracle ebs的新手,我需要一些帮助。
我正在oracle ebs r12中做一个报告,我需要使用SQL查询以分层方式列出fnd_flex_values_vl视图中的flex值。它不一定必须是分层查询。任何查询都可以。我只需要一个SQL语句,它将以层次结构的方式返回flex值。
有两个对象,用于存储有关flex值层次结构的信息。它是FND_FLEX_VALUE_NORM_HIERARCHY(表)和fnd_flex_value_children_v(视图)。我假设其中一个就足够了,因为fnd_flex_value_children_v是使用FND_FLEX_VALUE_NORM_HIERARCHY和其他一些对象制作的。
然而,我遇到的问题是,可能会列出几个父母的一个弹性值,我需要找到所有顶级父母或叶子,以便进行上下或自下而上的层次结构。据我所知,fnd_flex_value_children_v没有必要存储顶级父母(仅存储子女)。
似乎可能没有一个,但可能有多个层次结构(如果是这样,我需要在一个查询中列出它们)。
非常感谢您的帮助。我一直在努力解决这个问题。非常感谢您的关注。
最好的问候,新用户。 =)
您应该使用表APPLSYS.FND_FLEX_VALUE_SETS。您标识的对象是有关FND_FLEX_VALUE_SETS表的元数据对象。
我喜欢从根记录开始。
这是我查找根记录的方法(没有父记录)。
SELECT DISTINCT
FVS.PARENT_FLEX_VALUE_SET_ID
FROM
APPLSYS.FND_FLEX_VALUE_SETS FVS
WHERE
FVS.PARENT_FLEX_VALUE_SET_ID IS NOT NULL
ORDER BY 1 ;
一旦找到根记录,我就开发了一个start by子句:
START WITH
(
FVS.FLEX_VALUE_SET_ID IN
(SELECT DISTINCT FVS.PARENT_FLEX_VALUE_SET_ID
FROM APPLSYS.FND_FLEX_VALUE_SETS FVS
WHERE FVS.PARENT_FLEX_VALUE_SET_ID IS NOT NULL
)
该子句捕获所有根记录(您只能选择一个)。
接下来,我开发了我的connect by子句。既然我希望我的层次结构从根开始,我会采用这种方法:
级别1 flex_value_set_id ....先前级别
2级parent_flex_value_set_id
CONNECT BY fvs.parent_flex_value_set_id = prior fvs.flex_value_set_id ;
这导致了这个陈述:
SELECT LEVEL,
FVS.*
FROM APPLSYS.FND_FLEX_VALUE_SETS FVS
START WITH
(
FVS.FLEX_VALUE_SET_ID IN
(SELECT DISTINCT FVS.PARENT_FLEX_VALUE_SET_ID
FROM APPLSYS.FND_FLEX_VALUE_SETS FVS
WHERE FVS.parent_flex_value_set_id IS NOT NULL
)
)
CONNECT BY FVS.PARENT_FLEX_VALUE_SET_ID = PRIOR FVS.FLEX_VALUE_SET_ID ;
然后可以添加flex值,如下所示:
SELECT
LEVEL,
FVS.*
FROM
(SELECT
FLEX.FLEX_VALUE_SET_ID,
FLEX.PARENT_FLEX_VALUE_SET_ID,
FLEX.FLEX_VALUE_SET_NAME,
FVAL.FLEX_VALUE
FROM
APPLSYS.FND_FLEX_VALUE_SETS FLEX,
APPLSYS.FND_FLEX_VALUES FVAL
WHERE
FLEX.FLEX_VALUE_SET_ID = FVAL.FLEX_VALUE_SET_ID(+)) FVS
START WITH
(FVS.FLEX_VALUE_SET_ID IN
(SELECT DISTINCT
FVS.PARENT_FLEX_VALUE_SET_ID
FROM APPLSYS.FND_FLEX_VALUE_SETS FVS
WHERE FVS.parent_flex_value_set_id IS NOT NULL ) )
CONNECT BY
FVS.PARENT_FLEX_VALUE_SET_ID = PRIOR FVS.FLEX_VALUE_SET_ID;
可能这可以帮助你
SELECT fvc.PARENT_FLEX_VALUE RUBRO_N0 ,FVT.description
DESC_RUBRO_N0,FVC.FLEX_VALUE RUBRO_N1 , fvc.DESCRIPTION
DESC_RUBRO_N1,FVC2.FLEX_VALUE RUBRO_N2 , FVC2.DESCRIPTION
DESC_RUBRO_N2,FVC3.FLEX_VALUE RUBRO_N3 , FVC3.DESCRIPTION
DESC_RUBRO_N3,FVC4.FLEX_VALUE RUBRO_N4 , FVC4.DESCRIPTION
DESC_RUBRO_N4,NVL(FVC4.FLEX_VALUE,NVL(FVC3.FLEX_VALUE,NVL(FVC2.FLEX_VALUE,FVC.FLEX_VALUE))) RUBROFIN
FROM FND_FLEX_VALUE_CHILDREN_V fvc
,FND_FLEX_VALUE_CHILDREN_V FVC2
,FND_FLEX_VALUE_CHILDREN_V FVC3
,FND_FLEX_VALUE_CHILDREN_V FVC4
,FND_FLEX_VALUES_TL FVT
WHERE fvc.FLEX_VALUE_SET_ID = 1016176
AND fvc.PARENT_FLEX_VALUE not in(SELECT FLEX_VALUE FROM FND_FLEX_VALUE_CHILDREN_V WHERE FLEX_VALUE_SET_ID = --YOUR FLEX_VALUE_SET_ID)
AND fvc.FLEX_VALUE = FVC2.PARENT_FLEX_VALUE (+)
AND fvc2.FLEX_VALUE = FVC3.PARENT_FLEX_VALUE (+)
AND fvc3.FLEX_VALUE = FVC4.PARENT_FLEX_VALUE (+)
AND fvc.PARENT_FLEX_VALUE = FVT.FLEX_VALUE_MEANING
AND FVT.SOURCE_LANG = 'ESA'
AND FVT.LANGUAGE = 'ESA' AND FVT.LAST_UPDATE_LOGIN NOT IN (0)
ORDER BY 1,2,3,5,7
;
最好的祝福
以上是关于oracle ebs r12报告的Oracle flex值层次结构SQL查询的主要内容,如果未能解决你的问题,请参考以下文章