Я собираю данные из удаленных баз данных в центральную базу данных.
В удаленных базах данных я выполняю несколько запросов и использую 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
(не обращайте внимания на "где 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
....