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 ]
) कहां:
exprJSON दस्तावेज़ है जिसे आप क्वेरी करना चाहते हैंJSON_basic_path_expressionSQL/JSON पथ है जिसे आप उस JSON दस्तावेज़ से वापस करना चाहते हैं। फ़ंक्शनexpr. का मूल्यांकन करने के लिए पाथ एक्सप्रेशन का इस्तेमाल करता है और पथ व्यंजक से मेल खाने वाले या संतुष्ट करने वाले एक या अधिक JSON मान खोजें। पाथ एक्सप्रेशन टेक्स्ट शाब्दिक होना चाहिए।JSON_query_returning_clauseफ़ंक्शन द्वारा लौटाए गए वर्ण स्ट्रिंग के डेटा प्रकार और प्रारूप को निर्दिष्ट करता है।JSON_query_wrapper_clauseनियंत्रित करता है कि क्या फ़ंक्शन दिए गए मानों को एक सरणी आवरण में लपेटता है (वर्ग कोष्ठक ([].) ))।JSON_query_on_error_clauseकुछ त्रुटियाँ होने पर लौटाया गया मान निर्दिष्ट करता है।JSON_query_on_empty_clauseSQL/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 . के बराबर है .
त्रुटि प्रबंधन
पांच खंड हैं जिनका उपयोग आप यह निर्दिष्ट करने के लिए कर सकते हैं कि जब भी कुछ प्रकार की त्रुटियां होती हैं तो क्या वापस करना है। खंड हैं:
NULLONERROR- त्रुटि होने पर शून्य लौटाता है। यह डिफ़ॉल्ट है।ERRORONERROR- त्रुटि होने पर उपयुक्त Oracle त्रुटि लौटाता है।EMPTYONERROR- इस क्लॉज को निर्दिष्ट करनाEMPTY. को निर्दिष्ट करने के बराबर हैARRAYONERROR।EMPTYARRAYONERROR- एक खाली JSON सरणी देता है ([]) जब कोई त्रुटि होती है।EMPTYOBJECTONERROR- एक खाली 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निर्दिष्ट करके इस प्रकार की त्रुटि के व्यवहार को ओवरराइड कर सकते हैं । - रिटर्न वैल्यू डेटा टाइप इतना बड़ा नहीं है कि रिटर्न कैरेक्टर स्ट्रिंग को होल्ड कर सके
- फ़ंक्शन एकल स्केलर मान या, किसी भी प्रकार के एकाधिक मानों से मेल खाता है, और एक आवरण खंड निर्दिष्ट नहीं है
खाली परिणामों को संभालना
यदि कोई मिलान नहीं मिलता है तो आप दिए गए मान को निर्दिष्ट करने के लिए क्लॉज का भी उपयोग कर सकते हैं। यह खंड आपको इस प्रकार की त्रुटि के लिए त्रुटि खंड के साथ निर्दिष्ट परिणाम से भिन्न परिणाम निर्दिष्ट करने की अनुमति देता है।
ये खंड हैं:
NULLONEMPTY- कोई मिलान नहीं मिलने पर शून्य हो जाता है।ERRORONEMPTY- कोई मिलान नहीं मिलने पर उपयुक्त Oracle त्रुटि लौटाता है।EMPTYONEMPTY- इस क्लॉज को निर्दिष्ट करनाEMPTY. को निर्दिष्ट करने के बराबर हैARRAYONEMPTY।EMPTYARRAYONEMPTY- एक खाली JSON सरणी देता है ([]) जब कोई मेल नहीं मिलता है।EMPTYOBJECTONEMPTY- एक खाली JSON ऑब्जेक्ट देता है ({}) जब कोई मेल नहीं मिलता है।
उदाहरण:
SELECT
JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY ON EMPTY)
FROM DUAL; परिणाम:
[]
यदि आप इस खंड को छोड़ देते हैं, तो त्रुटि खंड कोई मिलान नहीं मिलने पर लौटाया गया मान निर्धारित करता है।