来自 JSON 列的 Oracle Select 带有连字符键

Oracle Select from JSON column with hyphenated keys

假设我将以下内容存储在 Oracle 数据库的 JSON 列中:

{
    "key-with-hyphens": "value"
}

假设此列在名为 my_table 的 table 中名为 json_column,那么我正在尝试 select "key-with-hyphens" 键的值像这样:

select json_column.key-with-hyphens from my_table;

这给了我以下错误:

ORA-00936: missing expression
00936. 00000 -  "missing expression"

当从 Oracle 中的 JSON 列中 select 为带连字符的键值计算值时,是否需要使用某种特殊语法?

事实证明,有几种方法可以做到这一点。

方法一:

按照我最初尝试的方式进行操作,这有几个问题select:

select json_column.key-with-hyphens from my_table;

首先,JSON 列中的键 selection 将不起作用,除非您为 table 添加别名,例如:

select mt.json_column.key-with-hyphens from my_table mt;

但是,这仍然不能解决连字符键的问题。要允许在此语法中使用带连字符的键,您需要将键的名称用引号引起来:

select mt.json_column."key-with-hyphens" from my_table mt;

以上查询将按预期工作。

方法二:

另一种不使用 table 别名的方法是在 select 子句中使用 json_value 函数。您将 JSON 列作为第一个参数传递,将 select 的键的完整路径作为第二个参数传递,使用 $ 作为 [=36] 的根上下文=] 对象存储在您的列中。以下查询也应按预期工作:

select json_value(json_column, '$."key-with-hyphens"') from my_table;