Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да наложа xmlforest създадени елементи, дори ако стойността на израза е нула?

Не можете да използвате 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>
...

За пълнота могат да се използват още два инструмента на 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL йерархична заявка:изравняване на йерархията и извършване на агрегиране

  2. Създаване на материализиран изглед, който се опреснява на всеки 5 минути

  3. как да използвате dbms_scheduler за изпълнение на заданието на всеки 30 минути

  4. Съвпадение на стойностите на дублирани колони на Oracle с помощта на Soundex, Jaro Winkler и Edit Distance (UTL_MATCH)

  5. грешка 3706 доставчикът не може да бъде намерен. може да не е инсталиран правилно