补充一个方便复现的case:
SELECT
/*+ SET_VAR(“spill_mode”= ‘auto’, “new_planner_optimize_timeout”= ‘3000000’) */
entry
AS entry
, subject_name_json
FROM (SELECT t7
.entry
, CASE WHEN CAST(CAST(t7
.entry1
AS JSON) -> ‘FACCOUNTID’ -> ‘FullName’ AS VARCHAR) = ‘[]’ THEN ‘’ ELSE t8
.value
END AS subject_name_json
FROM ((SELECT entry
, entry
AS entry1
FROM (SELECT t3
.entry
, CASE WHEN CAST(CAST(t3
.entry1
AS JSON) -> ‘FCURRENCYID’ -> ‘Name’ AS VARCHAR) = ‘[]’ THEN ‘’ ELSE t4
.value
END AS currency_json
FROM ((SELECT entry
, entry
AS entry1
FROM (SELECT CASE WHEN t
.value
IS NULL THEN NULL ELSE t
.value
END AS entry
FROM ((SELECT _tmp_ods_api_kidxk_gl_voucher_info_f2
.GL_VOUCHERENTRY
FROM hpp
._tmp_ods_api_kidxk_gl_voucher_info_f2
) AS _tmp_ods_api_kidxk_gl_voucher_info_f2
INNER JOIN JSON_EACH(CASE WHEN CAST(CASE WHEN GL_VOUCHERENTRY
= ‘[]’ THEN NULL ELSE GL_VOUCHERENTRY
END AS JSON) IS NULL THEN ‘{“mock”:null}’ ELSE CAST(CASE WHEN GL_VOUCHERENTRY
= ‘[]’ THEN NULL ELSE GL_VOUCHERENTRY
END AS JSON) END) AS t
ON TRUE)) AS t0
WHERE CAST(CAST(entry
AS JSON) -> ‘Id’ AS VARCHAR) <> ‘0’) AS t3
INNER JOIN JSON_EACH(CASE WHEN CAST(CAST(entry1
AS JSON) -> ‘FCURRENCYID’ -> ‘Name’ AS JSON) IS NULL THEN ‘{“mock”:null}’ ELSE CAST(CAST(entry1
AS JSON) -> ‘FCURRENCYID’ -> ‘Name’ AS JSON) END) AS t4
ON TRUE)) AS t5
) AS t7
INNER JOIN JSON_EACH(CASE WHEN CAST(CAST(entry1
AS JSON) -> ‘FACCOUNTID’ -> ‘FullName’ AS JSON) IS NULL THEN ‘{“mock”:null}’ ELSE CAST(CAST(entry1
AS JSON) -> ‘FACCOUNTID’ -> ‘FullName’ AS JSON) END) AS t8
ON TRUE)) AS t9