2013-11-15 136 views
0

我是oracle和oracle ebs的新手,我需要一些帮助。Oracle flex值层次结构oracle ebs r12的SQL查询报告

我在oracle ebs r12中做了一个报告,我需要使用SQL查询以分层方式列出fnd_flex_values_vl视图中的flex值。没必要必须是一个分级查询。任何查询都可以。我只需要一个SQL语句,它将以分层方式返回我的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不是必需的商店顶级父母(仅限商店儿童)。

而且似乎有可能是不是一个,而是有可能是多个层次的(如果是的话,我需要列出他们都在一个查询)。

您的帮助将非常感激。我一直在努力争取这一段时间。 非常感谢您的关注。

此致敬礼,新用户。 =)

+0

我不认为这与Adobe/Apache UI Framework有什么关系;所以我删除了Flex标签。 – JeffryHouser

+0

糟糕。抱歉。你是对的。我打算使用“弹性值”或类似的标签,但拼写错误。谢谢。 – user2995784

回答

0

您应该使用表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 ; 

一旦我找到根记录的,我发展我开始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 ; 

之一,那么可以按如下所示添加柔性值:

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; 
-1

可能是这样可以帮助你

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 
; 

最好的问候

+2

欢迎来到Stack Overflow!感谢您的代码片段,它可能会提供一些有限的即时帮助。通过展示*为什么*这是一个很好的解决方案,并且使它对未来的读者更有用,一个正确的解释[将大大提高](// meta.stackexchange.com/q/114762)其长期价值其他类似的问题。请[编辑]你的答案以添加一些解释,包括你所做的假设。 –