2017-01-27 4 views
0

OracleデータベースにSQLを使用してファイルXMLを生成する必要があります。私は ...あなたは私が私の最後のXMLファイルではなく、私はちょうど私のXMLに名前を持っている瞬間のための空のデータの多くを持って見ることができるように書き込み構文SQL作成XML

SELECT 
XMLParse(CONTENT '<company><siret></siret><type></type></company>'WELLFORMED), 
(XMLELEMENT("file", 
    XMLParse(CONTENT '<data>'WELLFORMED), 
    XMLAGG(XMLELEMENT("name",DECODE (INDIV.NAME, null, TRIM(INDIV.NAMEO), TRIM(INDIV.NAME)))), 
    XMLAGG(XMLELEMENT("nir",TRIM(INDIV.NIR))), 
    XMLAGG(XMLELEMENT("BIRTH",INDIV.DATE_BIRTH)), 
    XMLParse(CONTENT '</data><file-formation>'WELLFORMED), 
    XMLAGG(XMLELEMENT("id",' ')), 
    XMLAGG(XMLELEMENT("statut",' ')), 
    XMLAGG(XMLELEMENT("title",' ')), 
    XMLAGG(XMLELEMENT("code",' ')), 
    XMLAGG(XMLELEMENT("code-motif",' ')), 
    XMLAGG(XMLELEMENT("modalite",' ')), 
    XMLParse(CONTENT '<place>'WELLFORMED), 
    XMLAGG(XMLELEMENT("code",' ')), 
    XMLAGG(XMLELEMENT("city",' ')), 
    XMLParse(CONTENT '</place>'WELLFORMED), 
    XMLAGG(XMLELEMENT("date-start",' ')), 
    XMLAGG(XMLELEMENT("date-end",' ')), 
    XMLParse(CONTENT '<orga>'WELLFORMED), 
    XMLAGG(XMLELEMENT("siret",' ')), 
    XMLAGG(XMLELEMENT("ra",' ')), 
    XMLParse(CONTENT '</orga><beneficiaire>'WELLFORMED), 
    XMLAGG(XMLELEMENT("statut", DECODE (PRES.INSCRIT_PE, 1, 1, 2))), 
    XMLParse(CONTENT '</modalite>'WELLFORMED), 
    XMLAGG(XMLELEMENT("time", ACT.HEURE)), 
    XMLAGG(XMLELEMENT("cost",' ')))), 
    XMLParse(CONTENT '</file-formation></file></cpf:trainning>'WELLFORMED) 
FROM 
    STAGIAIRE STAG 
    INNER JOIN INDIVIDU INDIV 
    ON STAG.ID_INDIVIDU = INDIV.ID_INDIVIDU 
    INNER JOIN PRESCRIPTION PRES 
    ON PRES.ID = STAG.ID 
    INNER JOIN ACTION ACT 
    ON ACT.ID_ACTION = PRES.ID_ACTION 
    INNER JOIN PARCOURS PARC 
    ON PARC.ID = ACT.ID; 

を見つけるために、悩みを持っているどのようにすることができます私のすべてのXMLELEMENTをXMLAGGの後に追加してください

もっと正確には、次のXMLを作成する必要があります。最初の部分<company></company>は、私は私が追加して、私は私のミスを理解して、私のデータベース内<file>

<company> 
<siret></siret> 
<type></type> 
</company> 

<file> 
    <data> 
     <name>DECODE (INDIV.NAME, null, TRIM(INDIV.NAMEO), TRIM(INDIV.NAME)</name> 
      <nir>TRIM(INDIV.NIR)</nir> 
      <birth> INDIV.DATE_BIRTH</birth> 
    </data> 
    <file-formation> 
      <id></id> 
      <statut></statut> 
      <title></title> 
      <code></code> 
      <code-motif></codeMotif> 
      <modalite></modalite> 
      <place> 
       <code></code> 
       <city></city> 
      </place> 
      <date-start></date-start> 
      <date-end></date-end> 
      <orga></orga> 
      <siret></siret> 
      <ra></ra> 
      <beneficiaire> 
       <statut> DECODE (PRES.INSCRIT_PE, 1, 1, 2)</statut> 
      <time>ACT.HEURE</time> 
      <cost></cost> 
    </file-formation> 
</file> 

を持つことになりますように、第2の部分<file></file>のために、私は<file>できるだけ多くを持っている必要があり、次に作成しますすべてのXMLドキュメントでも同じです<file>要素の前にXMLAGGが、それはまだ働いていない...私は3000以上の<file>でファイルを持っていなければならないと私はちょうど1つのラインを持っている... 私は右の方法を見つけるために、問題がある

SELECT 
XMLParse(CONTENT '<company><siret></siret><type></type></company>'WELLFORMED), 
XMLAGG(XMLELEMENT("file", 
    XMLParse(CONTENT '<data>'WELLFORMED), 
    (XMLELEMENT("name",DECODE (INDIV.NAME, null, TRIM(INDIV.NAMEO), TRIM(INDIV.NAME)))), 
    (XMLELEMENT("nir",TRIM(INDIV.NIR))), 
    (XMLELEMENT("BIRTH",INDIV.DATE_BIRTH)), 
    XMLParse(CONTENT '</data><file-formation>'WELLFORMED), 
    (XMLELEMENT("id",' ')), 
    (XMLELEMENT("statut",' ')), 
    (XMLELEMENT("title",' ')), 
    (XMLELEMENT("code",' ')), 
    (XMLELEMENT("code-motif",' ')), 
    (XMLELEMENT("modalite",' ')), 
    XMLParse(CONTENT '<place>'WELLFORMED), 
    (XMLELEMENT("code",' ')), 
    (XMLELEMENT("city",' ')), 
    XMLParse(CONTENT '</place>'WELLFORMED), 
    (XMLELEMENT("date-start",' ')), 
    (XMLELEMENT("date-end",' ')), 
    XMLParse(CONTENT '<orga>'WELLFORMED), 
    (XMLELEMENT("siret",' ')), 
    (XMLELEMENT("ra",' ')), 
    XMLParse(CONTENT '</orga><beneficiaire>'WELLFORMED), 
    (XMLELEMENT("statut", DECODE (PRES.INSCRIT_PE, 1, 1, 2))), 
    XMLParse(CONTENT '</modalite>'WELLFORMED), 
    (XMLELEMENT("time", ACT.HEURE)), 
    (XMLELEMENT("cost",' ')))), 
    XMLParse(CONTENT '</file-formation></file></cpf:trainning>'WELLFORMED) 
FROM 
    STAGIAIRE STAG 
    INNER JOIN INDIVIDU INDIV 
    ON STAG.ID_INDIVIDU = INDIV.ID_INDIVIDU 
    INNER JOIN PRESCRIPTION PRES 
    ON PRES.ID = STAG.ID 
    INNER JOIN ACTION ACT 
+0

"ご覧のとおり..." - あなたが参照する最終的なXMLファイル、元のデータ、または実際に必要な出力を表示していません。私たちが何の情報なしでもできることを期待しているかどうかはわかりませんか? –

答えて

0

ありません本当にあなたの問題はここにありますが、これはちょっとした助けになるか、他の人を助けるでしょう。

私は

SELECT XMLAGG(XMLELEMENT("f1",v1),XMLELEMENT("f2", v2),... 

に私は小さな開始すると、その上に構築として、XMLELEMENTsのセットを集約するXMLAGGを使用しました。

SELECT 
    XMLROOT( 
    XMLELEMENT("soap:Envelope", 
       XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' AS "xmlns:xsi" 
           , 'http://www.w3.org/2001/XMLSchema' AS "xmlns:xsd" 
           , 'http://schemas.xmlsoap.org/soap/envelope/' AS "xmlns:soap"), 
     XMLELEMENT("soap:Body", 
     XMLELEMENT("serviceName", XMLATTRIBUTES('http://myserver.com/TheWebService/' AS "xmlns"), 
      XMLCONCAT(
      XMLELEMENT("cd" 
      , XMLCONCAT(
       (SELECT XMLAGG(
          XMLELEMENT("G1" 
          , XMLELEMENT("E1", v1) 
          , XMLELEMENT("E2", v2) 
          , CASE WHEN v3 IS NOT NULL 
            THEN XMLELEMENT("E3", v3) 
            ELSE XMLELEMENT("E3" 
             , XMLATTRIBUTES('true' AS "xsi:nil"), NULL) 
          END 
          , XMLELEMENT("E4", v4))) 
        FROM (SELECT 'v1' v1, 'v2' v2, 'v3' v3, 'v4' v4 FROM dual)) 
      ) -- XMLConcat 
      ) -- cd 
     ) -- XMLConcat 
     ) -- serviceName 
    ) -- soap:Body 
    ) -- soap:Envelope 
    , VERSION '1.0' 
).getclobval() 
    FROM dual; 

そして出力:あなたの質問に答えるためにここで何かがある

<?xml version="1.0"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <serviceName xmlns="http://myserver.com/TheWebService/"> 
     <cd> 
     <G1> 
      <E1>v1</E1> 
      <E2>v2</E2> 
      <E3>v3</E3> 
      <E4>v4</E4> 
     </G1> 
     </cd> 
    </serviceName> 
    </soap:Body> 
</soap:Envelope> 

希望

はここで架空のSOAPリクエストを生成するために、いくつかのSQLの小さな作業例です。これを実行してXML文書を生成することができるはずです。重要なことは、必要に応じて追加要素を小さくして開始することです。

+0

XMLCONCATは何ですか? –

+0

ありがとうDCookie!モデルを扱うのは本当にいいですね。素晴らしい:D –