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

XMLCast और XMLQuery के साथ GROUP BY का उपयोग करना ORA-22950 देता है

एक मूल्य के माध्यम से एकत्र करने के लिए, मान को क्रमबद्ध/हैश करने योग्य होना चाहिए, जिसका अर्थ है कि किन्हीं दो मानों को तुलनीय होना चाहिए (क्रमबद्ध/हैश किए जाने के लिए)। XMLType क्रमबद्ध/हैश करने योग्य नहीं है। Oracle में एक ऑब्जेक्ट/क्लास हैशेबल/सॉर्ट करने योग्य होता है, जब उसके पास एक विशेष कार्य होता है map या order परिभाषित। देखें संबंधित Oracle दस्तावेज़

आप xcol . के माध्यम से एकत्रित कर रहे हैं , जो एक XMLType है मूल्य। तो, आपकी समस्या का समाधान किसी अन्य चीज़ के माध्यम से एकत्रित करना होगा।

आप हमें जो अराजक जानकारी दे रहे हैं, उसके आधार पर मेरे दिमाग में दो समाधान आते हैं...

समाधान 1

WITH xdata AS
     (SELECT 1 AS a_id,
             xmltype ('<a>
                <b>
                    <b_id>1</b_id>
                    <val>2</val>
                </b>
                <b>
                    <b_id>1</b_id>
                    <val>3</val>
                </b>
             </a>') AS xcol
        FROM DUAL
      UNION ALL
      SELECT 2 AS a_id,
             xmltype ('<a>
                <b>
                    <b_id>3</b_id>
                    <val>5</val>
                </b>
                <b>
                    <b_id>4</b_id>
                    <val>4</val>
                </b>
             </a>') AS xcol
        FROM DUAL)
SELECT a_id,
     sum(XMLCAST (
         XMLQUERY ('sum($doc/a/b/val)'
                   PASSING xcol AS "doc" RETURNING CONTENT) AS INTEGER))
         b_val
FROM xdata
group by a_id;

समाधान 2

WITH xdata AS
     (SELECT 1 AS a_id,
             xmltype ('<a>
                <b>
                    <b_id>1</b_id>
                    <val>2</val>
                </b>
                <b>
                    <b_id>1</b_id>
                    <val>3</val>
                </b>
             </a>') AS xcol
        FROM DUAL
      UNION ALL
      SELECT 2 AS a_id,
             xmltype ('<a>
                <b>
                    <b_id>3</b_id>
                    <val>5</val>
                </b>
                <b>
                    <b_id>4</b_id>
                    <val>4</val>
                </b>
             </a>') AS xcol
        FROM DUAL)
select X.a_id, sum(Y.b_val) as b_val
from xdata X
    cross join xmltable(
        '/a/b'
        passing X.xcol
        columns
            b_val integer path 'val'
    ) Y
group by X.a_id;


  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 दिनांक स्वरूप

  2. हाइबरनेट में Oracle XMLType कॉलम का उपयोग करना

  3. नमूना डेटा - संग्रहीत प्रक्रिया को निष्पादित करते समय समस्या जिसमें अद्यतन और सम्मिलित विवरण दोनों शामिल हैं

  4. त्रुटि:असंगत वर्ण एन्कोडिंग:UTF-8 और ASCII-8BIT

  5. आप कैसे बता सकते हैं कि Oracle में कोई मान संख्यात्मक नहीं है?