sql >> データベース >  >> RDS >> Oracle

式の値がnullの場合でも、xmlforest creat要素を適用するにはどうすればよいですか?

    XMLFOREST>

    同様の XMLCOLATTVAL 機能:

    XMLELEMENT 一方、要求に応じて空の要素を返します:

    SQL> select xmlelement("EMP", xmlelement("ENAME", ename), 
      2                           xmlelement("JOB", job),
      3                           xmlelement("MGR", mgr)
      4         ).getclobval() xml
      5    from scott.emp;
    
    XML
    ----------------------------------------------------------------
    <EMP><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><MGR></MGR></EMP>
    <EMP><ENAME>BLAKE</ENAME><JOB>MANAGER</JOB><MGR>7839</MGR></EMP>
    ...
    

    完全を期すために、さらに2つのOracleツールを使用することもできます(この投稿に触発されました。 OTNフォーラム )。まず、 XMLQUERY (11.2?):

    SQL> select
      2    xmlquery(
      3     '(#ora:view_on_null empty #) {
      4      <EMPS> {
      5          for $c in fn:collection("oradb:/SCOTT/EMP")/ROW
      6          return element EMP {
      7            $c/ENAME
      8          , $c/JOB
      9          , $c/MGR
     10       }
     11      }</EMPS>
     12     }'
     13    passing cast(10 as number) as "mid"
     14    returning content
     15  ).getClobval() as result
     16  from dual;
    
    RESULT 
    ----------------------------------------------------------------------
    <EMPS>
       <EMP><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><MGR></MGR></EMP>
       <EMP><ENAME>BLAKE</ENAME>...
    

    DBMS_XMLGEN パッケージ:

    SQL> DECLARE
      2    ctx    dbms_xmlgen.ctxHandle;
      3    sqlstr varchar2(4000)
      4       := 'SELECT ename, job, mgr FROM scott.emp WHERE ename=''KING''';
      5    res    clob;
      6  BEGIN
      7    ctx := dbms_xmlgen.newContext(sqlstr);
      8    dbms_xmlgen.setNullHandling(ctx, dbms_xmlgen.EMPTY_TAG);
      9    res := dbms_xmlgen.getXML(ctx);
     10    dbms_xmlgen.closeContext(ctx);
     11    dbms_output.put_line(res);
     12  END;
     13  /
    
    <?xml version="1.0"?>
    <ROWSET>
     <ROW>
      <ENAME>KING</ENAME>
      <JOB>PRESIDENT</JOB>
      <MGR/>
     </ROW>
    </ROWSET>
    



    1. JOINの後にDISTINCT値を選択します

    2. 動的な.htaccess禁止の作成に関する問題

    3. Oracleで1レベルの深いネスト制限に対処するにはどうすればよいですか?

    4. SQLでハイフンとスペースを同じように扱うことは可能ですか?