値が存在しない場合に表示するXMLタグを取得しようとしています。 XMLタグは、XMLスキーマファイルでは必須です。しかし、ある場合には、このElement(タグ)の値は存在しません。実際のOracle11g SQL文は次のとおりです(データベース値が9999999999以外)。このOracle XML SQL問合せは、他のXML SQLに埋め込まれています。私はXMLのタグは以下のように表示するようになるだろうどのようにNULL値で表示するSQL XMLタグの取得
、おかげで事前に
<ProdId>
<idType></idType>
<id></id>
</ProdId>
SELECT XMLELEMENT ("prodId",
XMLELEMENT ("idType",NVL(x.idType,'N/A')),
XMLELEMENT ("id",NVL(x.id,'N/A'))
)
from
(SELECT DECODE (alternative_creation_ids.gc_alt_usage_id_type_code,'PROD',1,
'ISAN',2,
'CUI',3,9) AS oderby,
DECODE(alternative_creation_ids.gc_alt_usage_id_type_code,'PROD','SOCIETY-ID',
'ISAN','ISAN',
'CUI','CLOCKID','N/A') AS idType,
alternative_creation_ids.alternative_creation_id AS id,
alternative_creation_ids.cre_surr_id AS cre_surr_id
FROM alternative_creation_ids
WHERE alternative_creation_ids.gc_alt_usage_id_type_table = 'AUIT'
AND alternative_creation_ids.gc_alt_usage_id_type_code in ('ISAN','CUI','PROD')
order by 1) x
WHERE x.cre_surr_id = 9999999999999
表の構造は以下です。
CREATE TABLE ALTERNATIVE_CREATION_IDS
(
ALTERNATIVE_CREATION_ID VARCHAR2(100 BYTE) NOT NULL,
CRE_SURR_ID NUMBER(12) NOT NULL,
TP_SURR_ID NUMBER(12),
GC_ALT_USAGE_ID_TYPE_TABLE VARCHAR2(5 BYTE) DEFAULT 'AUIT' NOT NULL,
GC_ALT_USAGE_ID_TYPE_CODE VARCHAR2(5 BYTE) NOT NULL,
SOC_SURR_ID NUMBER(12),
SURR_ID NUMBER(12) NOT NULL)
以下のデータがあります。
--SQL Statement which produced this data:
--
-- select * from alternative_creation_ids where surr_id in (5068066723,
-- 5068066724,
-- 5068066725,
-- 5068066726,
-- 5068066727,
-- 5068066729,
-- 5068066731,
-- 5068066732,
-- 5068066733);
--
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('4YvUOe8q9N2kQ5aflrezTs', 4890969424, 9513, 'AUIT', 'PROD',
NULL, 5068066723);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('5GgVV6DFbWofT50C0dMRl0', 4891029626, 9513, 'AUIT', 'PROD',
NULL, 5068066724);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('4YyWUP4TOLM0lLKgbxXens', 4890969425, 9513, 'AUIT', 'PROD',
NULL, 5068066725);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('5Gh2ldlMcEjcxGXQZO2erc', 4891029627, 9513, 'AUIT', 'PROD',
NULL, 5068066726);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('5GhltgxuEfhzPiBxOoMKdl', 4891029628, 9513, 'AUIT', 'PROD',
NULL, 5068066727);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('3JfOCUI9q8yb3lJdEJPPbE', 4890969284, 9513, 'AUIT', 'PROD',
NULL, 5068066729);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('5GjwMbQWxB97ddPnqDAUt8', 4891029629, 9513, 'AUIT', 'PROD',
NULL, 5068066731);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('5GjLSJ14WJlRSUe4MNoNLE', 4891029630, 9513, 'AUIT', 'PROD',
NULL, 5068066732);
Insert into ALTERNATIVE_CREATION_IDS
(ALTERNATIVE_CREATION_ID, CRE_SURR_ID, TP_SURR_ID, GC_ALT_USAGE_ID_TYPE_TABLE, GC_ALT_USAGE_ID_TYPE_CODE,
SOC_SURR_ID, SURR_ID)
Values
('5GjSKGaNJzhVlL9ygkyNbY', 4891029631, 9513, 'AUIT', 'PROD',
NULL, 5068066733);
COMMIT;
正解はAlex Pooleさんでした。ちょうどあなたの情報のために、私は下のXML SQLに行きました。私は空白の値だけを表示するようにタグを取得しようとしましたが、これまでの理由で終了タグが示されました(下記参照)。
<ProdId>
</Idtype>
</id>
</ProdId>
はので、代わりに私は、テーブル内のデータがない場合は、既存のクエリが空のタグを生成することはできません
<ProdId>
<Idtype>N/A</Idtype>
<id>N/A</id>
</ProdId>
,( -- start level 5 tag prodId
SELECT XMLELEMENT ("prodId",
XMLELEMENT ("idType",x.idType),
XMLELEMENT ("idType",x.id))
from
(SELECT DECODE (alternative_creation_ids.gc_alt_usage_id_type_code,'PROD',1,
'ISAN',2,
'CUI',3,9) AS oderby,
DECODE (alternative_creation_ids.gc_alt_usage_id_type_code,'PROD','SOCIETY-ID',
'ISAN','ISAN',
'CUI','CLOCKID','N/A') AS idType,
alternative_creation_ids.alternative_creation_id AS id,
alternative_creation_ids.cre_surr_id AS cre_surr_id
FROM alternative_creation_ids
WHERE alternative_creation_ids.gc_alt_usage_id_type_table = 'AUIT'
AND alternative_creation_ids.gc_alt_usage_id_type_code in ('ISAN','CUI','PROD')
order by 1) x
WHERE x.cre_surr_id = cre.surr_id
UNION ALL
SELECT XMLELEMENT ("prodId",
XMLELEMENT ("idType",'N/A'),
XMLELEMENT ("id",'N/A')
)
FROM dual
WHERE NOT EXISTS (SELECT null FROM alternative_creation_ids
WHERE cre_surr_id = cre.surr_id)
) -- end level 5 tag prodId
テーブル構造とサンプルデータを追加して、空白のタグを生成できますか? –
ホープ、これがアレックス・ポールを助ける –