sql - सीओएलबी के लिए ओरेकल में JSON कैसे उत्पन्न किया जाता है, जो>32k(जैसे 60,000 अक्षर)?




oracle plsql clob (2)

1) मुझे ऑरेकल चयन क्वेरी से जेसनसन बनाना होगा जो कि तीन तरीकों से मैं अनुसरण कर सकता हूं।

SELECT JSON_ARRAY(json_object('id'         VALUE employee_id, 
                   'data_clob'    VALUE data_clob
                     )) from tablename;

मैंने इस दृष्टिकोण के साथ भी कोशिश की है

2) यदि आप उस संस्करण के साथ पैच / काम करने में असमर्थ हैं, तो लुईस कनिंघम और जोनास क्रॉग्स्बैल द्वारा लिखित एक उत्कृष्ट पैकेज है: पीएल / जेएसओएन * http://pljson.sourceforge.net/

यह एक उत्कृष्ट पैकेज है (मैं इसे कई डेटाबेस प्रतिष्ठानों में उपयोग किया है)

शामिल उदाहरण अच्छे हैं और अधिकतर परिदृश्यों को कवर करते हैं।

declare 
  ret json;
begin
  ret := json_dyn.executeObject('select * from tab');
  ret.print;
end;
/

उल्लेख इस उत्तर में भी है लेकिन इस तरह के बड़े clob के लिए काम नहीं एसक्यूएल क्वेरी के परिणामों को ओरेकल 12 सी में JSON के रूप में लौटाएं

3) अन्य दृष्टिकोण हो सकता है कि हम चयन क्वेरी के बाद स्ट्रिंग को जोड़ सकते हैं।

FOR rec IN (SELECT employee_id, data_clob
                FROM tablename) LOOP
      IF i <> 1 THEN
        v_result := v_result || ',';
      END IF;

      v_result := v_result || '{"employee_id":' || to_char(rec.employee_id) || ',"data_clob": ' || rec.data_clob || '}';

      i := i + 1;
    END LOOP;
    v_result := v_result || ']}'; 

3 दृष्टिकोण मेरी समस्या को हल करता है, लेकिन मैं पाश के लिए चलाना नहीं चाहता । क्या इस को संभालने के लिए ओरेकल में कोई हल है?

मैं समाधान की जांच करता हूं, लेकिन यह बिना किसी लूप के लिए काम करता है।

https://technology.amis.nl/2015/03/13/using-an-aggregation-function-to-query-a-json-string-straight-from-sql/

यूआरएल ने कुछ समाधान प्रदान किया है, मैंने इसे करने की कोशिश की लेकिन काम नहीं कर रहा .समस्या आ रही है

ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 57416, maximum: 4000)

क्या आप मुझे बता सकते हैं कि यह कैसे किया जा सकता है?


Answers

इस प्रश्न के जवाब में:

3 दृष्टिकोण मेरी समस्या को हल करता है, लेकिन मैं पाश के लिए चलाना नहीं चाहता । क्या इस को संभालने के लिए ओरेकल में कोई हल है?

ओरेकल की LISTAGG फ़ंक्शन का उपयोग करके स्ट्रिंग को बिना पाशन के लिए LISTAGG जा सकता है:

SELECT '{"employees":[' || LISTAGG('{"employee_id":' || to_char(employee_id)
                      || ',"data_clob":"' || data_clob || '"}', ',')
              WITHIN GROUP (ORDER BY employee_id) || ']}' AS json
FROM tablename;

हालांकि, जैसा कि आपने टिप्पणियों में बताया है, LISTAGG की 4000 वर्णों की सीमा है निम्नलिखित अधिक जटिल / सुधारात्मक है, लेकिन इस सीमा से परे सामना करना चाहिए:

SELECT '{"employees":[' || dbms_xmlgen.convert(
         RTRIM(XMLAGG(XMLELEMENT(E,'{"employee_id":' || to_char(employee_id)
                                 || ',"data_clob":"' || data_clob || '"}',',')
                      .EXTRACT('//text()') ORDER BY employee_id).GetClobVal(),',')
       , 1) || ']}' AS json
FROM tablename;

XMLAGG संभालता है, लेकिन XMLAGG फ़ंक्शन में कुछ वर्णों से बचने का साइड-प्रभाव होता है (जैसे " से &quot; )। ऊपर दिए गए क्वेरी dbms_xmlgen.convert फ़ंक्शन का उपयोग करके इन dbms_xmlgen.convert (जैसे &quot; से " ) को dbms_xmlgen.convert करते हैं - यह उत्तर देखें अधिक जानकारी के लिए।

एसक्यूएल फ़ाइड डेमो: http://sqlfiddle.com/#!4/5b295/40


मैंने एक उपकरण लिखा है जिसमें सबसे अच्छा "स्मार्ट व्हाइटस्पेस" प्रारूपक उपलब्ध है। यह यहां के अधिकांश विकल्पों की तुलना में अधिक पठनीय और कम वर्बोज़ आउटपुट उत्पन्न करता है।

underscore-cli

यह "स्मार्ट व्हाइटस्पेस" जैसा दिखता है:

मैं थोड़ी पक्षपातपूर्ण हो सकता हूं, लेकिन यह कमांड लाइन से जेएसओएन डेटा को छपाई और छेड़छाड़ करने के लिए एक शानदार उपकरण है। यह उपयोग करने के लिए अति-अनुकूल है और इसमें व्यापक कमांड लाइन सहायता / दस्तावेज़ीकरण है। यह एक स्विस सेना चाकू है जिसका उपयोग मैं 1001 विभिन्न छोटे कार्यों के लिए करता हूं जो किसी भी अन्य तरीके से आश्चर्यजनक रूप से परेशान होंगे।

नवीनतम उपयोग-मामला: क्रोम, देव कंसोल, नेटवर्क टैब, सभी को एचएआर फ़ाइल के रूप में निर्यात करें, "cat site.har | underscore select '.url' --outfmt text | grep mydomain"; अब मेरी कंपनी की साइट के लोड होने के दौरान किए गए सभी यूआरएल लाने की क्रोनोलॉजिकल ऑर्डर की गई सूची है।

सुंदर प्रिंटिंग आसान है:

underscore -i data.json print

वही चीज:

cat data.json | underscore print

वही बात, अधिक स्पष्ट:

cat data.json | underscore print --outfmt pretty

यह टूल मेरा वर्तमान जुनून प्रोजेक्ट है, इसलिए यदि आपके पास कोई फीचर अनुरोध है, तो मुझे एक अच्छा मौका मिलेगा कि मैं उन्हें संबोधित करूंगा।





sql json oracle plsql clob