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

Oracle 18c में जेसन को कुशलतापूर्वक कैसे पार्स करें?

आप json_table() use का उपयोग कर सकते हैं JSON मान को एक संबंधपरक प्रतिनिधित्व में बदलने के लिए। बदले में इसका उपयोग MERGE स्टेटमेंट के भीतर किया जा सकता है।

उदा. निम्नलिखित प्रश्न:

select j.*
from itv_dev_logs
  cross join json_table(log_clob, '$.data.routedStops[*]'
                        columns stop_id integer path '$.stopId',
                                zone_ltf integer path '$.zoneLTF', 
                                info_stop_nr integer path '$.routingInfo.stop',
                                info_route_ref varchar(20) path '$.routingInfo.routeRef',
                                info_eta varchar(20) path '$.routingInfo.eta',
                                info_eta_dt timestamp path '$.routingInfo.etaDateTime',
                                info_stop_time number path '$.routingInfo.stopTime'
                        ) j
where log_id = 1435334;

कुछ इस तरह लौटाता है:

STOP_ID       | ZONE_LTF | INFO_STOP_NR | INFO_ROUTE_REF | INFO_ETA | INFO_ETA_DT             | INFO_STOP_TIME | INFO_DIST_PREV_STOP | INFO_BREAK_TIME | INFO_BREAK_DURATION
--------------+----------+--------------+----------------+----------+-------------------------+----------------+---------------------+-----------------+--------------------
1554383571432 |        1 |            1 | R119           | 11:01    | 2019-04-16 11:01:00.000 |           0.08 |                0.27 | 00:00           | 00:00              
1554383571515 |        1 |            2 | R119           | 11:07    | 2019-04-16 11:07:00.000 |           0.08 |                0.34 | 00:00           | 00:00              
1554383571601 |        1 |            3 | R119           | 11:13    | 2019-04-16 11:13:00.000 |           0.08 |                   0 | 00:00           | 00:00              
1554383571671 |        1 |            4 | R119           | 11:19    | 2019-04-16 11:19:00.000 |           0.08 |                   0 | 00:00           | 00:00              
1554383571739 |        1 |            5 | R119           | 11:25    | 2019-04-16 11:25:00.000 |           0.08 |                   0 | 00:00           | 00:00              

इसका उपयोग आपकी लक्ष्य तालिका को अद्यतन करने के लिए MERGE विवरण के स्रोत के रूप में किया जा सकता है:

merge into your_target_table tg
using (
    select j.*
    from itv_dev_logs
      cross join json_table(log_clob, '$.data.routedStops[*]'
                            columns stop_id integer path '$.stopId',
                                    zone_ltf integer path '$.zoneLTF', 
                                    info_stop_nr integer path '$.routingInfo.stop',
                                    info_route_ref varchar(20) path '$.routingInfo.routeRef',
                                    info_eta varchar(20) path '$.routingInfo.eta',
                                    info_eta_dt timestamp path '$.routingInfo.etaDateTime',
                                    info_stop_time number path '$.routingInfo.stopTime'
                            ) j
    where log_id = 1435334
) t on (t.stop_id = tg.stop_id and ... more join conditions ...)
when matched then update
    set stop_nr = t.info_stop_nr, 
        eta_timestamp = t.eta_dt, 

जैसा कि आपने न तो लक्ष्य की संरचना प्रदान की है और न ही जानकारी जो JSON कुंजियों का मिलान किस तालिका कॉलम से किया जाना चाहिए, सभी कॉलम नाम केवल अनुमान हैं और आपको उन्हें सही नामों से बदलने की आवश्यकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में विभाजन और उच्च जल चिह्न

  2. Oracle में डुप्लिकेट पंक्तियों को हटाने के 2 तरीके

  3. ओरेकल में फॉर की व्याख्या करें

  4. OC4J 10.1.3.3 ojms.rar डेटाबेस दृढ़ता स्थापित करने में असमर्थ है

  5. ऑरैकल स्कीमा में डेटाटाइप जानकारी कैसे प्राप्त करें?