【问题标题】:Oracle Select from JSON column with hyphenated keysOracle 从带有连字符键的 JSON 列中选择
【发布时间】:2017-02-09 15:17:16
【问题描述】:

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

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

假设此列在名为 my_table 的表中称为 json_column,那么我正在尝试选择 "key-with-hyphens" 键的值,如下所示:

select json_column.key-with-hyphens from my_table;

这给了我以下错误:

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

在从 Oracle 的 JSON 列中选择连字符键的值时,是否需要使用某种特殊语法?

【问题讨论】:

    标签: json oracle hyphen


    【解决方案1】:

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

    方法一:

    按照我尝试的原始方式进行操作,此选择存在一些问题:

    select json_column.key-with-hyphens from my_table;
    

    首先,JSON 列中的键选择将不起作用,除非您为表设置别名,如下所示:

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

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

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

    上述查询将按预期工作。

    方法二:

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

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

    【讨论】:

    • 好地方!我可能在文档中忽略了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2021-12-19
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多