Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm cách nào để thực thi các phần tử tạo xmlforest ngay cả khi giá trị biểu thức là null?

Bạn có thể 'sử dụng XMLFOREST :

Cũng không phải XMLCOLATTVAL tương tự chức năng:

XMLELEMENT mặt khác trả về một phần tử trống theo yêu cầu:

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>
...

Để hoàn thiện, bạn cũng có thể sử dụng thêm hai công cụ Oracle nữa (lấy cảm hứng từ bài đăng này trên diễn đàn OTN ). Trước tiên, bạn có thể sử dụng XMLQUERY (vào ngày 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>...

Bạn cũng có thể sử dụng DBMS_XMLGEN gói:

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. Làm thế nào để tối ưu hóa truy vấn với hơn 10 lần tham gia?

  2. Làm thế nào để đoán trước và thoát khỏi báo giá đơn 'trong oracle

  3. Làm cách nào để tôi có thể khởi tạo một Trình duyệt dữ liệu hồ sơ để sử dụng với BỘ LỌC MVC MINI?

  4. Oracle thiếu kiểu dữ liệu Bit cho các cột bảng

  5. Những mạng lưới an toàn