我想使用内部包含JSON的CLOB查询整个表

时间:2019-05-21 13:30:21

标签: json join clob pljson

我正在将数据从远程数据库收集到中央数据库中。 在远程数据库上,我运行几个查询,并使用PLJSON将结果捕获到JSON数据结构(JSON_LIST)中。 然后将数据插入到我的中央数据库的登台表中。

CREATE TABLE SSP_STAGE_DB_GATHER
(
  ID              NUMBER  NOT NULL,
  DB_NAME         VARCHAR2(20 BYTE)             NOT NULL,
  DB_UNIQUE_NAME  VARCHAR2(20 BYTE)             NOT NULL,
  RESULT_TYPE     VARCHAR2(20 BYTE)             NOT NULL,
  LOADED_AT       DATE                          NOT NULL,
  JSON_RESULT     CLOB                          NOT NULL
)
LOB (JSON_RESULT) STORE AS SECUREFILE (
  TABLESPACE  AUT_DB_GATHER_LOB)
TABLESPACE AUT_DB_GATHER 

在数据库上运行收集后,此表中的结果将如下所示

ID DB_NAME DB_UNIQUE_NAME RESULT_TYPE LOADED_AT JSON_RESULT 
1  D4081T  D4081T_CCH     FRA         21/5/2019 13:30:33    (HUGECLOB)
2  D4081T  D4081T_CCH     TABLESPACE  21/5/2019 13:30:33    (HUGECLOB)
3  D4081T  D4081T_CCH     PATCH_INFO  21/5/2019 13:30:33    (HUGECLOB)
21  D2647O D2647O     FRA         21/5/2019 13:43:04    (HUGECLOB)
22  D2647O D2647O     TABLESPACE  21/5/2019 13:43:05    (HUGECLOB)
23  D2647O D2647O     PATCH_INFO  21/5/2019 13:43:05    (HUGECLOB)

我能够查询每行,但是我想查询所有行(例如) RESULT_TYPE = TABLESPACE。

我可以通过ID = 22

进行查询
SELECT *
  FROM TABLE (pljson_table.json_table ( (SELECT  JSON_RESULT
                                           FROM SSP_STAGE_DB_GATHER
                                          WHERE id = 22),
                                       pljson_varray ('[*].Tablespace',
                                                      '[*].LOGGING',
                                                      '[*].BIGFILE',
                                                      '[*].USED_MB',
                                                      '[*].FREE_MB',
                                                      '[*].TOTAL_MB',
                                                      '[*].PRC_FREE'),
                                       pljson_varray ('Tablespace',
                                                      'logging',
                                                      'bigfile',
                                                      'used',
                                                      'free',
                                                      'total',
                                                      'pct'),
                                       table_mode   => 'nested'))
   where pct >99

(不要介意“ where pct> 99”。这仅仅是为了限制输出)

结果

    TABLESPACE           LOGGING  BIGFILE  USED    FREE    TOTAL   PCT    
    -------------------- -------- -------- ------- ------- ------- -----
    AUT_DB_GATHER        LOGGING  YES      0       100     100     100    
    AUTOMATION_TRAINING  LOGGING  YES      0       100     100     100    
    AUT_DB_GATHER_LOB    LOGGING  YES      0       100     100     100    
    STAGING              LOGGING  YES      0       100     100     100   
   4 rows selected.

在上面的示例中,我必须使用ID = 22,因为“ TABLE(pljson_table.json_table“需要1个值(一个clob /一个json对象)。

我想要一个查询,该查询将基于RESULT_TYPE='TABLESPACE'搜索整个表,并为找到的每个记录查询相应记录的JSON对象。

So I need to join:
SELECT  JSON_RESULT FROM AUT_DB.SSP_STAGE_DB_GATHER
 WHERE RESULT_TYPE = 'TABLESPACE'

使用上述JSON查询

希望获取这样的结果

DB_NAME TABLESPACE           LOGGING  BIGFILE  USED    FREE    TOTAL   PCT    
------- -------------------- -------- -------- ------- ------- ------- -----
D2647O  AUT_DB_GATHER        LOGGING  YES      0       100     100     100    
D2647O  AUTOMATION_TRAINING  LOGGING  YES      0       100     100     100    
D2647O  AUT_DB_GATHER_LOB    LOGGING  YES      0       100     100     100    
D26470  STAGING              LOGGING  YES      0       100     100     100 
... 
D7788O  SYSTEM               LOGGING  YES      0       100     100     100    
D7788O  AUTOMATION           LOGGING  YES      0       100     100     100  

....

0 个答案:

没有答案