Oracle डाटाबेस में, JSON_TABLE()
फ़ंक्शन JSON डेटा का एक संबंधपरक दृश्य बनाता है। यह आपको JSON दस्तावेज़ में मानों को तालिका प्रारूप में - पंक्तियों और स्तंभों के रूप में प्रस्तुत करने की अनुमति देता है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause )
कहां:
expr
JSON दस्तावेज़ है जिसे आप क्वेरी करना चाहते हैंJSON_basic_path_expression
SQL/JSON पथ व्यंजक है।JSON_query_on_error_clause
कुछ त्रुटियाँ होने पर लौटाया गया मान निर्दिष्ट करता है।JSON_query_on_empty_clause
यदि कोई मिलान नहीं मिलता है तो लौटाया गया मान निर्दिष्ट करता है।JSON_columns_clause
फ़ंक्शन द्वारा लौटाए गए वर्चुअल रिलेशनल टेबल में कॉलम को परिभाषित करता है।
JSON_TABLE()
फ़ंक्शन का उपयोग केवल FROM
. में किया जा सकता है SELECT
. का खंड बयान।
उदाहरण
यह कैसे काम करता है यह दिखाने के लिए यहां एक उदाहरण दिया गया है:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));
परिणाम:
A B C ____ ____ ____ 1 2 3
यहाँ यह थोड़ा और डेटा के साथ है:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
);
परिणाम:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
कम कॉलम
यदि हम COLUMNS
. में निर्दिष्ट स्तंभों की संख्या कम कर देते हैं, तो यहां क्या होता है? खंड:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b)
);
परिणाम:
A B ____ ____ 1 2 4 5 7 8
हम SELECT
. में चयनित कॉलम निर्दिष्ट करके समान परिणाम प्राप्त कर सकते हैं सूची:
SELECT a, b
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
);
परिणाम:
A B ____ ____ 1 2 4 5 7 8
विशिष्ट पंक्तियों का चयन करें
हम WHERE
. जैसे खंडों का उपयोग कर सकते हैं केवल उन पंक्तियों का चयन करने के लिए जो एक निश्चित मानदंड को पूरा करती हैं:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
)
WHERE b = 5;
परिणाम:
A B C ____ ____ ____ 4 5 6
त्रुटि प्रबंधन
त्रुटियों से निपटने के लिए हम निम्नलिखित खंडों का उपयोग कर सकते हैं:
NULL ON ERROR
- यदि इनपुट अच्छी तरह से गठित JSON नहीं है, तो उस बिंदु से कोई और पंक्तियाँ नहीं लौटाई जाती हैं जहाँ त्रुटि का पता चलता है।
- यदि पंक्ति पथ व्यंजक का मूल्यांकन करते समय कोई मिलान नहीं मिलता है, तो कोई पंक्तियाँ वापस नहीं की जाती हैं।
- सभी स्तंभ अभिव्यक्तियों के लिए डिफ़ॉल्ट त्रुटि व्यवहार को
NULL ON ERROR
पर सेट करता है
ERROR ON ERROR
- यदि इनपुट अच्छी तरह से तैयार JSON नहीं है, तो एक त्रुटि उत्पन्न होती है।
- यदि पंक्ति पथ अभिव्यक्ति का मूल्यांकन करते समय कोई मिलान नहीं मिलता है, तो एक त्रुटि उत्पन्न होगी
- सभी स्तंभ अभिव्यक्तियों के लिए डिफ़ॉल्ट त्रुटि व्यवहार को
ERROR ON ERROR
पर सेट करता है
यहां NULL ON ERROR
का एक उदाहरण दिया गया है :
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]',
'$[*]'
NULL ON ERROR
COLUMNS(a, b, c)
);
परिणाम:
A B C ____ ____ ____ 1 2 3 4 5 6
चूंकि JSON_TABLE()
फ़ंक्शन स्ट्रीमिंग मूल्यांकन का समर्थन करता है, त्रुटि के साथ इनपुट के हिस्से का सामना करने से पहले पंक्तियों को वापस किया जा सकता है। ठीक यही हम इस उदाहरण से देख सकते हैं - हमें पहली दो पंक्तियाँ मिलीं, लेकिन तीसरी नहीं (JSON के उस हिस्से के अच्छी तरह से गठित JSON नहीं होने के कारण)।
यहाँ यह ERROR ON ERROR
. के साथ है खंड:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]',
'$[*]'
ERROR ON ERROR
COLUMNS(a, b, c)
);
परिणाम:
Error report - ORA-40441: JSON syntax error
खाली परिणामों को संभालना
यदि कोई मिलान नहीं मिलता है तो आप दिए गए मान को निर्दिष्ट करने के लिए क्लॉज का भी उपयोग कर सकते हैं। यह खंड आपको इस प्रकार की त्रुटि के लिए त्रुटि खंड के साथ निर्दिष्ट परिणाम से भिन्न परिणाम निर्दिष्ट करने की अनुमति देता है।
ये खंड हैं:
NULL
ON
EMPTY
- कोई मिलान नहीं मिलने पर शून्य हो जाता है।ERROR
ON
EMPTY
- कोई मिलान नहीं मिलने पर उपयुक्त Oracle त्रुटि लौटाता है।DEFAULT
literal
ON
EMPTY
- रिटर्नliteral
जब कोई मेल नहीं मिला। डेटा प्रकारliteral
इस फ़ंक्शन द्वारा दिए गए मान के डेटा प्रकार से मेल खाना चाहिए।
JSON_TABLE()
. के बारे में अधिक जानकारी के लिए Oracle दस्तावेज़ देखें समारोह।