Oracle JSON_QUERY 以路径作为查询列值

Oracle JSON_QUERY with path as query column value

我试图在这个 select

的每个结果行中获取 JSON 列的一部分
SELECT TRIM(a.symbol),
       TRIM(a.ex_name),
       to_char(a.date_rw, 'dd-MON-yyyy'),
       a.pwr,
       a.last,
       JSON_QUERY(b.mval, '$."-9"') as value
FROM   adviser_log a
       INNER JOIN profit_model_d b
       ON a.date_rw = b.date_rw
WHERE  a.date_rw = '08-OCT-2021'

select 结果:

VERY    NAS  08-OCT-2021    -9  8.9443 {"sl":-3.6,"tp":5,"avg":1.368,"max":5,"min":-3.6,"count":1}

作为 json 路径,我输入了“-9”文字,但我想将其作为路径 a.pwr 是否可行 我试过 conCAT('$.', a.pwr) 没有结果 是否可以通过任何方式将动态 json 路径创建到 JSON_QUERy

我想将 json 部分与 a.pwr 相比的键匹配到 select

中的每一行

感谢

您可以使用函数动态获取 JSON 值:

WITH FUNCTION get_value(
  value IN CLOB,
  path  IN VARCHAR2
) RETURN VARCHAR2
IS
BEGIN
  RETURN JSON_OBJECT_T( value ).get_object( path ).to_string();
END;
SELECT TRIM(a.symbol) AS symbol,
       TRIM(a.ex_name) AS ex_name,
       to_char(a.date_rw, 'dd-MON-yyyy') AS date_rw,
       a.pwr,
       a.last,
       get_value(b.mval, a.pwr) AS value
FROM   adviser_log a
       INNER JOIN profit_model_d b
       ON a.date_rw = b.date_rw
WHERE  a.date_rw = DATE '2021-10-08'

其中,对于您的样本数据:

CREATE TABLE adviser_log (symbol, ex_name, date_rw, pwr, last) AS
SELECT 'VERY', 'NAS', DATE '2021-10-08', -9, 8.9443 FROM DUAL;

CREATE TABLE profit_model_d (date_rw DATE, mval CLOB CHECK (mval IS JSON));

INSERT INTO profit_model_d (
  date_rw,
  mval
) VALUES (
  DATE '2021-10-08',
  '{"-9":{"sl":-3.6,"tp":5,"avg":1.368,"max":5,"min":-3.6,"count":1}}'
);

输出:

SYMBOL EX_NAME DATE_RW PWR LAST VALUE
VERY NAS 08-OCT-2021 -9 8.9443 {"sl":-3.6,"tp":5,"avg":1.368,"max":5,"min":-3.6,"count":1}

db<>fiddle here