あなたのfrom all_tab_columns
dense_rank()
を経由してシーケンス番号を生成し、インライン・ビューに変更することができます。
from (
select atc.*,
dense_rank() over (order by table_name) as table_sequence,
dense_rank() over (partition by table_name order by column_name) as column_sequence
from all_tab_columns atc
where owner='SYS'
and table_name in ('ALL_APPLY_ENQUEUE','ALL_APPLY_EXECUTE','ALL_APPLY_KEY_COLUMNS')
)
そして、あなたは、あなたのXMLでそれらの生成された列を使用することができます。
select XMLROOT (xmlagg(
xmlelement(
"table_description",
xmlelement(
"table_name",
table_name
),
xmlelement(
"table_sequence",
table_sequence
),
xmlelement(
"table_columns",
xmlagg(
xmlforest(
column_name as "column_name",
column_sequence as "column_sequence"
)
)
)
)
), VERSION '1.0', STANDALONE YES)
from (
select atc.*,
dense_rank() over (order by table_name) as table_sequence,
dense_rank() over (partition by table_name order by column_name) as column_sequence
from all_tab_columns atc
where owner='SYS'
and table_name in ('ALL_APPLY_ENQUEUE','ALL_APPLY_EXECUTE','ALL_APPLY_KEY_COLUMNS')
)
where owner='SYS'
and table_name in ('ALL_APPLY_ENQUEUE','ALL_APPLY_EXECUTE','ALL_APPLY_KEY_COLUMNS')
group by table_name, table_sequence;
:
<?xml version="1.0" standalone="yes"?>
<table_description>
<table_name>ALL_APPLY_ENQUEUE</table_name>
<table_sequence>1</table_sequence>
<table_columns>
<column_name>DESTINATION_QUEUE_NAME</column_name>
<column_sequence>1</column_sequence>
<column_name>RULE_OWNER</column_name>
<column_sequence>3</column_sequence>
<column_name>RULE_NAME</column_name>
<column_sequence>2</column_sequence>
</table_columns>
</table_description>
<table_description>
<table_name>ALL_APPLY_EXECUTE</table_name>
<table_sequence>2</table_sequence>
<table_columns>
<column_name>EXECUTE_EVENT</column_name>
<column_sequence>1</column_sequence>
<column_name>RULE_OWNER</column_name>
<column_sequence>3</column_sequence>
<column_name>RULE_NAME</column_name>
<column_sequence>2</column_sequence>
</table_columns>
</table_description>
<table_description>
<table_name>ALL_APPLY_KEY_COLUMNS</table_name>
<table_sequence>3</table_sequence>
<table_columns>
<column_name>APPLY_DATABASE_LINK</column_name>
<column_sequence>1</column_sequence>
<column_name>OBJECT_OWNER</column_name>
<column_sequence>4</column_sequence>
<column_name>OBJECT_NAME</column_name>
<column_sequence>3</column_sequence>
<column_name>COLUMN_NAME</column_name>
<column_sequence>2</column_sequence>
</table_columns>
</table_description>
生成されたXMLは、各列とそのシーケンス番号の間にリンクが存在しないため、まだ正しくありません。
select XMLROOT (xmlagg(
xmlelement(
"table_description",
xmlelement(
"table_name",
table_name
),
xmlelement(
"table_sequence",
table_sequence
),
xmlelement(
"table_columns",
xmlagg(
xmlelement(
"column_description",
xmlforest(
column_name as "column_name",
column_sequence as "column_sequence"
)
)
)
)
)
), VERSION '1.0', STANDALONE YES)
from (
select atc.*,
dense_rank() over (order by table_name) as table_sequence,
dense_rank() over (partition by table_name order by column_name) as column_sequence
from all_tab_columns atc
where owner='SYS'
and table_name in ('ALL_APPLY_ENQUEUE','ALL_APPLY_EXECUTE','ALL_APPLY_KEY_COLUMNS')
)
where owner='SYS'
and table_name in ('ALL_APPLY_ENQUEUE','ALL_APPLY_EXECUTE','ALL_APPLY_KEY_COLUMNS')
group by table_name, table_sequence;
を取得する:たぶん、あなたはより多くのような何かをしたい
<?xml version="1.0" standalone="yes"?>
<table_description>
<table_name>ALL_APPLY_ENQUEUE</table_name>
<table_sequence>1</table_sequence>
<table_columns>
<column_description>
<column_name>DESTINATION_QUEUE_NAME</column_name>
<column_sequence>1</column_sequence>
</column_description>
<column_description>
<column_name>RULE_OWNER</column_name>
<column_sequence>3</column_sequence>
</column_description>
<column_description>
<column_name>RULE_NAME</column_name>
<column_sequence>2</column_sequence>
</column_description>
</table_columns>
</table_description>
<table_description>
<table_name>ALL_APPLY_EXECUTE</table_name>
<table_sequence>2</table_sequence>
<table_columns>
<column_description>
<column_name>EXECUTE_EVENT</column_name>
<column_sequence>1</column_sequence>
</column_description>
<column_description>
<column_name>RULE_OWNER</column_name>
<column_sequence>3</column_sequence>
</column_description>
<column_description>
<column_name>RULE_NAME</column_name>
<column_sequence>2</column_sequence>
</column_description>
</table_columns>
</table_description>
<table_description>
<table_name>ALL_APPLY_KEY_COLUMNS</table_name>
<table_sequence>3</table_sequence>
<table_columns>
<column_description>
<column_name>APPLY_DATABASE_LINK</column_name>
<column_sequence>1</column_sequence>
</column_description>
<column_description>
<column_name>OBJECT_OWNER</column_name>
<column_sequence>4</column_sequence>
</column_description>
<column_description>
<column_name>OBJECT_NAME</column_name>
<column_sequence>3</column_sequence>
</column_description>
<column_description>
<column_name>COLUMN_NAME</column_name>
<column_sequence>2</column_sequence>
</column_description>
</table_columns>
</table_description>
あなたの出力は、右を見ていません。列シーケンスが列の下のノードであるべきか?または、シーケンスの値が表ノードと列ノードの属性であるべきであるかどうかを、より明確に示します。また、どのOracleのバージョンを使用していますか? –
@AlexPoole申し訳ありませんが、私は十分にはっきりしていないと思います。私は、出力が上の入力が与えるものと同じではないことを完全に認識しています。私は出力がどのように表示されるべきかの擬似的な例を与えたかっただけです。私は本当に欲しいものをより適切にフォーマットします。私はOracle 10XEを使用しています。 – Paran0a
シーケンスは、適切なノードを持つ兄弟でなければなりません。 column_nameとcolumn_sequenceは兄弟でなければなりません。 table_nameとtable_Sequenceと同じです。 – Paran0a