2013-11-15 120 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)其長期價值其他類似的問題。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 –