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

ORA-22922 (गैर-मौजूद LOB मान) प्राप्त करना या wm_concat () के साथ कोई परिणाम नहीं

सौभाग्य से, यह listagg( ... ) . के साथ काम करता है 11.2 . के बाद से प्रदान किया गया फ़ंक्शन (हम पहले से ही चल रहे हैं), इसलिए हमें आगे जांच करने की आवश्यकता नहीं थी:

listagg( abc, ',' ) within group ( order by abc )

(जहां wm_concat(...) जैसा कि किसी को पता होना चाहिए, कुछ आंतरिक और आधिकारिक रूप से असमर्थित कार्य है।)

a बल्कि अच्छा समाधान (क्योंकि यह इतना फूला हुआ नहीं है) distinct को लागू करने के लिए कार्यक्षमता स्व-संदर्भित regexp कार्यक्षमता के माध्यम से है जो कई मामलों में काम करना चाहिए:

regexp_replace( 
  listagg( abc, ',' ) within group ( order by abc )
, '(^|,)(.+)(,\2)+', '\1\2' )

(हो सकता है/उम्मीद है कि हम कुछ काम करते हुए देखेंगे listagg( distinct abc ) भविष्य में कार्यक्षमता, जो wm_concat . की तरह बहुत साफ-सुथरी और शानदार होगी वाक्य - विन्यास। उदा. Postgres' string_agg( distinct abc ) के साथ लंबे समय से यह कोई समस्या नहीं है )

-- 1: postgres sql example:
select string_agg( distinct x, ',' ) from unnest('{a,b,a}'::text[]) as x`

यदि सूची 4000 वर्णों से अधिक है , एक listagg का उपयोग नहीं कर सकता अब और (ORA-22922 फिर से)। लेकिन सौभाग्य से हम xmlagg . का उपयोग कर सकते हैं यहां कार्य करें (जैसा बताया गया है यहां ).यदि आप एक distinct को समझना चाहते हैं एक 4000-वर्ण-छंटनी परिणाम पर यहां, आप (1) को मात दे सकते हैं -चिह्नित पंक्तियाँ

-- in smallercase everything that could/should be special for your query
-- comment in (1) to realize a distinct on a 4000 chars truncated result
WITH cfg AS ( 
  SELECT 
    ','                  AS list_delim,
    '([^,]+)(,\1)*(,|$)' AS list_dist_match,  -- regexp match for distinct functionality
    '\1\3'               AS LIST_DIST_REPL  -- regexp replace for distinct functionality
  FROM DUAL
)
SELECT
  --REGEXP_REPLACE( DBMS_LOB.SUBSTR(             -- (1)
  RTRIM( XMLAGG( XMLELEMENT( E, mycol, listdelim ).EXTRACT('//text()') 
  ORDER BY mycol ).GetClobVal(), LIST_DELIM ) 
  --, 4000 ), LIST_DIST_MATCH, LIST_DIST_REPL )  -- (1)
  AS mylist
FROM mytab, CFG



  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. Oracle डेटाबेस के लिए कनेक्शन टाइमआउट सेटिंग

  4. जावा - सटीक अर्थ http.maxConnections

  5. ORA-01799:हो सकता है कि एक कॉलम सबक्वेरी से बाहरी-जुड़ा न हो