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

JSON_QUERY () Oracle में फ़ंक्शन

Oracle डाटाबेस में, JSON_QUERY() फ़ंक्शन JSON डेटा से एक या अधिक मान चुनता है और लौटाता है और उन मानों को वापस करता है।

आप JSON दस्तावेज़ के टुकड़े पुनर्प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं।

सिंटैक्स

वाक्य रचना इस प्रकार है:

JSON_QUERY
  ( expr [ FORMAT JSON ], JSON_basic_path_expression
    [ JSON_query_returning_clause ] [ JSON_query_wrapper_clause ]
    [ JSON_query_on_error_clause ] [ JSON_query_on_empty_clause ]
  )

कहां:

  • expr JSON दस्तावेज़ है जिसे आप क्वेरी करना चाहते हैं
  • JSON_basic_path_expression SQL/JSON पथ है जिसे आप उस JSON दस्तावेज़ से वापस करना चाहते हैं। फ़ंक्शन expr . का मूल्यांकन करने के लिए पाथ एक्सप्रेशन का इस्तेमाल करता है और पथ व्यंजक से मेल खाने वाले या संतुष्ट करने वाले एक या अधिक JSON मान खोजें। पाथ एक्सप्रेशन टेक्स्ट शाब्दिक होना चाहिए।
  • JSON_query_returning_clause फ़ंक्शन द्वारा लौटाए गए वर्ण स्ट्रिंग के डेटा प्रकार और प्रारूप को निर्दिष्ट करता है।
  • JSON_query_wrapper_clause नियंत्रित करता है कि क्या फ़ंक्शन दिए गए मानों को एक सरणी आवरण में लपेटता है (वर्ग कोष्ठक ([] .) ))।
  • JSON_query_on_error_clause कुछ त्रुटियाँ होने पर लौटाया गया मान निर्दिष्ट करता है।
  • JSON_query_on_empty_clause SQL/JSON पथ अभिव्यक्ति का उपयोग करके JSON डेटा का मूल्यांकन करने पर कोई मिलान नहीं मिलने पर लौटाया गया मान निर्दिष्ट करता है।

वैकल्पिक खंडों की विस्तृत व्याख्या के लिए Oracle दस्तावेज़ देखें।

उदाहरण

यह दिखाने के लिए एक उदाहरण यहां दिया गया है कि JSON_QUERY() . कैसे फ़ंक्शन काम करता है:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$')
FROM DUAL;

परिणाम:

{"a":1,"b":2,"c":3}

डॉलर चिह्न का उपयोग करने से JSON डेटा की पूरी स्ट्रिंग अपने आप वापस आ जाती है।

आवरण के साथ

आप WITH WRAPPER का उपयोग कर सकते हैं परिणाम को सरणी आवरण में लपेटने के लिए क्लॉज:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$' WITH WRAPPER)
FROM DUAL;

परिणाम:

[{"a":1,"b":2,"c":3}]

यदि पथ व्यंजक एकल स्केलर मान (एक मान जो JSON ऑब्जेक्ट या JSON सरणी नहीं है) या किसी भी प्रकार के एकाधिक मानों से मेल खाता है, तो आपको यह खंड निर्दिष्ट करना होगा।

उदाहरण के लिए, निम्न अदिश मान लौटाना WITH WRAPPER के साथ किया जाना चाहिए खंड:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$.b' WITH WRAPPER)
FROM DUAL;

परिणाम:

[2]

WITH WRAPPER को छोड़ना क्लॉज जब एक स्केलर मान लौटाता है तो एक शून्य मान वापस आ जाता है:

SET NULL 'null';
SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$.b')
FROM DUAL;

परिणाम:

null

डिफ़ॉल्ट रूप से, SQLcl और SQL*Plus जब भी null . खाली स्थान लौटाते हैं SQL SELECT . के परिणामस्वरूप होता है बयान।

हालांकि, आप SET NULL . का उपयोग कर सकते हैं वापस करने के लिए एक अलग स्ट्रिंग निर्दिष्ट करने के लिए। यहाँ मैंने निर्दिष्ट किया है कि स्ट्रिंग null लौटाया जाना चाहिए।

सशर्त आवरण के साथ

वैकल्पिक रूप से, आप WITH CONDITIONAL WRAPPER का उपयोग कर सकते हैं यदि पथ व्यंजक एकल अदिश मान या किसी भी प्रकार के एकाधिक मानों से मेल खाता है, तो केवल सरणी आवरण को शामिल करने के लिए क्लॉज। यदि पथ अभिव्यक्ति एकल JSON ऑब्जेक्ट या JSON सरणी से मेल खाती है, तो सरणी आवरण छोड़ दिया जाता है:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$' WITH CONDITIONAL WRAPPER) AS "r1",
    JSON_QUERY('{a:1, b:2, c:3}', '$.b' WITH CONDITIONAL WRAPPER) AS "r2"
FROM DUAL;

परिणाम:

                    r1     r2 
______________________ ______ 
{"a":1,"b":2,"c":3}    [2]   

इस मामले में, केवल अदिश मान में सरणी आवरण लागू होता है।

स्पष्ट होने के लिए, यहाँ यह बिना शर्त आवरण के साथ है:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$' WITH UNCONDITIONAL WRAPPER) AS "r1",
    JSON_QUERY('{a:1, b:2, c:3}', '$.b' WITH UNCONDITIONAL WRAPPER) AS "r2"
FROM DUAL;

परिणाम:

                      r1     r2 
________________________ ______ 
[{"a":1,"b":2,"c":3}]    [2]   

इस बार दोनों परिणामों में रैपर लागू है।

ध्यान दें कि WITH UNCONDITIONAL WRAPPER WITH WRAPPER . के बराबर है .

त्रुटि प्रबंधन

पांच खंड हैं जिनका उपयोग आप यह निर्दिष्ट करने के लिए कर सकते हैं कि जब भी कुछ प्रकार की त्रुटियां होती हैं तो क्या वापस करना है। खंड हैं:

  • NULL ON ERROR - त्रुटि होने पर शून्य लौटाता है। यह डिफ़ॉल्ट है।
  • ERROR ON ERROR - त्रुटि होने पर उपयुक्त Oracle त्रुटि लौटाता है।
  • EMPTY ON ERROR - इस क्लॉज को निर्दिष्ट करना EMPTY . को निर्दिष्ट करने के बराबर है ARRAY ON ERROR
  • EMPTY ARRAY ON ERROR - एक खाली JSON सरणी देता है ([] ) जब कोई त्रुटि होती है।
  • EMPTY OBJECT ON ERROR - एक खाली JSON ऑब्जेक्ट देता है ({} ) जब कोई त्रुटि होती है।

यहां एक उदाहरण दिया गया है:

SELECT 
    JSON_QUERY('["a", "b", "c"]', '$[3]' NULL ON ERROR) AS "r1",
    JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY ON ERROR) AS "r2",
    JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY OBJECT ON ERROR) AS "r3"
FROM DUAL;

परिणाम:

     r1    r2    r3 
_______ _____ _____ 
null    []    {}   

यहाँ यह ERROR ON ERROR . के साथ है खंड:

SELECT 
    JSON_QUERY('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;

परिणाम:

Error report -
ORA-40462: JSON_VALUE evaluated to no value

ये त्रुटि खंड निम्नलिखित त्रुटियों को संभालने के लिए हैं:

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

खाली परिणामों को संभालना

यदि कोई मिलान नहीं मिलता है तो आप दिए गए मान को निर्दिष्ट करने के लिए क्लॉज का भी उपयोग कर सकते हैं। यह खंड आपको इस प्रकार की त्रुटि के लिए त्रुटि खंड के साथ निर्दिष्ट परिणाम से भिन्न परिणाम निर्दिष्ट करने की अनुमति देता है।

ये खंड हैं:

  • NULL ON EMPTY - कोई मिलान नहीं मिलने पर शून्य हो जाता है।
  • ERROR ON EMPTY - कोई मिलान नहीं मिलने पर उपयुक्त Oracle त्रुटि लौटाता है।
  • EMPTY ON EMPTY - इस क्लॉज को निर्दिष्ट करना EMPTY . को निर्दिष्ट करने के बराबर है ARRAY ON EMPTY
  • EMPTY ARRAY ON EMPTY - एक खाली JSON सरणी देता है ([] ) जब कोई मेल नहीं मिलता है।
  • EMPTY OBJECT ON EMPTY - एक खाली JSON ऑब्जेक्ट देता है ({} ) जब कोई मेल नहीं मिलता है।

उदाहरण:

SELECT 
    JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY ON EMPTY)
FROM DUAL;

परिणाम:

[]

यदि आप इस खंड को छोड़ देते हैं, तो त्रुटि खंड कोई मिलान नहीं मिलने पर लौटाया गया मान निर्धारित करता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जीआई 12.2 परिवर्तन

  2. ओरेकल (+) ऑपरेटर

  3. Oracle वर्चुअल बॉक्स इंस्टालेशन के लिए चरण दर चरण निर्देश

  4. Oracle में एक तिथि के लिए सामान्य संकेतक जोड़ें

  5. Oracleपैरामीटर और IN क्लॉज