Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल में एक्सएमएल टाइप नल मानों वाले कॉलम के लिए टैग उत्पन्न नहीं कर रहा है

आप dbms_xmlgen का उपयोग dbms_xmlgen.setNullHandling(qryCtx, dbms_xmlgen.EMPTY_TAG) या dbms_xmlgen के साथ कर सकते हैं।NULL_ATTR:

उदाहरण के लिए, अपना फ़ंक्शन बनाएं

create or replace function f_get_xmltype_with_nulls (cur sys_refcursor, null_handling int default dbms_xmlgen.null_attr)
  return xmltype
as
  /* null_handling may be: 
      DROP_NULLS CONSTANT NUMBER:= 0;  Leaves out the tag for NULL elements.
      NULL_ATTR CONSTANT NUMBER:= 1; (Default) Sets xsi:nil="true".
      EMPTY_TAG CONSTANT NUMBER:= 2; Sets, for example, <foo/>.
  */
  res xmltype;
  lc dbms_xmlgen.ctxhandle;
begin
  lc:=dbms_xmlgen.newcontext(cur);
  -- you can replace null_attr with empty_tag here:
  dbms_xmlgen.setnullhandling(lc, null_handling);
  res:=dbms_xmlgen.getxmltype(lc);
  return res;
end;
/

तो आप इसे प्रश्नों में उपयोग कर सकते हैं:

SQL> select f_get_xmltype_with_nulls(cursor(select null x from dual connect by level<10)) x from dual;

X
------------------------------------------------------------------------
<ROWSET xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
</ROWSET>

जैसा कि आप देख सकते हैं कि इस फ़ंक्शन का दूसरा पैरामीटर null_handling है:

  • DROP_NULLS CONSTANT NUMBER:=0; NULL तत्वों के लिए टैग छोड़ देता है।
  • NULL_ATTR CONSTANT NUMBER:=1; (डिफ़ॉल्ट) xsi:nil="true" सेट करता है।
  • EMPTY_TAG CONSTANT NUMBER:=2; सेट, उदाहरण के लिए, .

या आप अपने फ़ंक्शन को क्वेरी में इनलाइन भी कर सकते हैं:

with 
   function f_get_xmltype_with_nulls (cur sys_refcursor, null_handling int default dbms_xmlgen.null_attr)
     return xmltype
   as
     /* null_handling may be: 
         DROP_NULLS CONSTANT NUMBER:= 0;  Leaves out the tag for NULL elements.
         NULL_ATTR CONSTANT NUMBER:= 1; (Default) Sets xsi:nil="true".
         EMPTY_TAG CONSTANT NUMBER:= 2; Sets, for example, <foo/>.
     */
     res xmltype;
     lc dbms_xmlgen.ctxhandle;
   begin
     lc:=dbms_xmlgen.newcontext(cur);
     -- you can replace null_attr with empty_tag here:
     dbms_xmlgen.setnullhandling(lc, null_handling);
     res:=dbms_xmlgen.getxmltype(lc);
     return res;
   end;
select
   f_get_xmltype_with_nulls(cursor(select null as x from dual)) as xxx 
from dual
/

डिफ़ॉल्ट NULL_ATTR के साथ परिणाम:

XXX
-----------------------------------------------------------------
<ROWSET xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
 <ROW>
  <X xsi:nil = "true"/>
 </ROW>
</ROWSET>

डिफ़ॉल्ट EMPTY_TAG के साथ परिणाम:

select
   f_get_xmltype_with_nulls(cursor(select null as x from dual),2) as xxx 
from dual;

XXX
-------------------------------------
<ROWSET>
 <ROW>
  <X/>
 </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. ओरेकल बिना यूनियन के कॉलम को पंक्तियों में कैसे स्थानांतरित करें

  2. अस्पष्ट स्तंभ क्वेरी

  3. SQL - ID NOT IN का उपयोग करके उन्नत डुप्लिकेट निकालना

  4. मैं Oracle JDBC में संग्रहीत प्रक्रिया में परिभाषित IN OUT CLOB पैरामीटर का उपयोग कैसे करूं?

  5. स्वचालित रूप से डेटा निकालना - Oracle SQL डेवलपर