0

私は oracle と oracle ebs が初めてで、助けが必要です。

私は oracle ebs r12 でレポートを作成しており、SQL クエリを使用して階層的に fnd_flex_values_vl ビューからフレックス値をリストする必要があります。階層クエリである必要はありません。どんなクエリでも構いません。階層的な方法でフレックス値を返す SQL ステートメントが必要なだけです。

フレックス値の階層に関する情報を格納する 2 つのオブジェクトがあります。FND_FLEX_VALUE_NORM_HIERARCHY (テーブル) と fnd_flex_value_children_v (ビュー) です。fnd_flex_value_children_v は FND_FLEX_VALUE_NORM_HIERARCHY およびその他のオブジェクトを使用して作成されているため、これらのいずれかで十分だと思います。

しかし、私が直面した問題は、1 つの flex 値に対して複数の親がリストされる可能性があり、アップボトムまたはボトムアップの階層を行うためにすべてのトップの親またはリーフを見つける必要があるということです。私が理解している限り、fnd_flex_value_children_v は最上位の親を保存する必要はありません (子のみを保存します)。

また、おそらく 1 つではないようですが、複数の階層が存在する可能性があります (そうであれば、1 つのクエリですべてを一覧表示する必要があります)。

あなたの助けは本当に感謝されます. 私はこれにかなり長い間苦労してきました。ご清聴ありがとうございました。

よろしく、新しいユーザー。=)

4

3 に答える 3

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 ;  

ルート レコードを見つけたら、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
)

この句は、すべてのルート レコードを取得します (1 つだけを選択できます)。

次に、connect by 句を作成します。階層をルートから開始したいので、次のアプローチをとります。

レベル 1 flex_value_set_id ....前のレベル

レベル 2 親のフレックス値のセット 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;
于 2013-11-15T15:18:29.683 に答える
0

Blitz Report ライブラリからのこの SQL は、fnd_flex_value_norm_hierarchy に基づいて階層構造を返し、すべての子フレックス値が含まれています: https://www.enginatics.com/reports/fnd-flex-value-hierarchy/

select
lpad(' ',2*(level-1))||level level_,
lpad(' ',2*(level-1))||ffvnh.parent_flex_value value,
ffvv.description,
decode(ffvnh.range_attribute,'P','Parent','C','Child') range_attribute,
ffvnh.child_flex_value_low,
ffvnh.child_flex_value_high,
decode(connect_by_isleaf,1,'Yes') is_leaf,
connect_by_root ffvnh.parent_flex_value root_value,
substr(sys_connect_by_path(ffvnh.parent_flex_value,'-> '),4) path,
ffvnh.parent_flex_value value_flat
from
(
select
ffvnh.parent_flex_value,
ffvnh.child_flex_value_low,
ffvnh.child_flex_value_high,
ffvnh.range_attribute,
ffvnh.flex_value_set_id
from
fnd_flex_value_norm_hierarchy ffvnh
where
ffvnh.flex_value_set_id=(select ffvs.flex_value_set_id from fnd_flex_value_sets ffvs where ffvs.flex_value_set_name=:flex_value_set_name)
union all
select
ffv2.flex_value parent_flex_value,
null child_flex_value_low,
null child_flex_value_high,
'x' range_attribute,
ffv2.flex_value_set_id
from
fnd_flex_values ffv2
where
2=2 and
ffv2.summary_flag='N' and
ffv2.flex_value_set_id=(select ffvs.flex_value_set_id from fnd_flex_value_sets ffvs where ffvs.flex_value_set_name=:flex_value_set_name)
) ffvnh,
fnd_flex_values_vl ffvv
where
3=3 and
ffvnh.parent_flex_value=ffvv.flex_value and
ffvnh.flex_value_set_id=ffvv.flex_value_set_id
connect by nocycle
ffvnh.parent_flex_value between prior ffvnh.child_flex_value_low and prior ffvnh.child_flex_value_high and
decode(nvl(prior ffvnh.range_attribute,'P'),'P','Y','N')=ffvv.summary_flag
start with
ffvnh.parent_flex_value=:parent_flex_value and
1=1 and
(:parent_flex_value is not null or
not exists (select null from
fnd_flex_value_norm_hierarchy ffvnh0
where
ffvnh0.flex_value_set_id=(select ffvs.flex_value_set_id from fnd_flex_value_sets ffvs where ffvs.flex_value_set_name=:flex_value_set_name) and
ffvnh.parent_flex_value between ffvnh0.child_flex_value_low and ffvnh0.child_flex_value_high and
ffvv.summary_flag=decode(ffvnh0.range_attribute,'P','Y','N')
)
)

すべての階層 (異なる親の上位値) を表示するには、親のフレックス値に対する「開始」制限を削除します。

ffvnh.parent_flex_value=:parent_flex_value
于 2020-04-19T10:15:54.587 に答える