【问题标题】:Oracle 19c Inserting data from JSON into a table in PL/SQLOracle 19c 将 JSON 中的数据插入 PL/SQL 中的表中
【发布时间】:2021-04-30 03:50:58
【问题描述】:

我有一些现有的工作 PL/SQL 代码在使用 dbms_xmlstore.insertxml(...) 将数据插入表的 19c Oracle 数据库中运行。为此,XML 的结构使元素名称与表列名称匹配,因此 XML 看起来像这样:

<ROWSET>
  <ROW>
    <EMPLOYEE_ID>920</EMPLOYEE_ID>
    <SALARY>1800</SALARY>
  </ROW>
  <ROW>
    <EMPLOYEE_ID>921</EMPLOYEE_ID>
    <SALARY>2000</SALARY>
  </ROW>
</ROWSET>

我现在需要做一些类似的事情,但使用 JSON 数据,那么是否有等效的东西允许我直接从 JSON 对象将行插入到表中,或者将 JSON 转换为 XML 并继续使用当前的工作代码?

编辑: 我需要复制的关键部分是 insertxml() 函数从 XML 中获取列名的方式,而我不需要将它们提供给函数。

【问题讨论】:

    标签: json xml oracle plsql


    【解决方案1】:

    是的,您可以将JSON_TABLE 命令用作INSERT 语句的一部分。像这样:

    INSERT INTO employees
    SELECT *
    FROM JSON_TABLE('{employees:[
                       {employee_id: 123, salary: 100000}, 
                       {employee_id: 234, salary: 90000}
                     ]}',
                    '$.employees[*]'
                    COLUMNS (employee_id NUMBER PATH '$.employee_id', 
                             salary NUMBER PATH '$.salary'));
    

    我为此创建了一个 dbFiddle:Link

    【讨论】:

    • 这几乎是我需要的,这和 insertxml() 的区别在于我需要提供列名,而不是从 XML 中的标签中获取。
    • @Jackson - Oracle 的 JSON 实现故意是轻量级的,因为它们被 XML 烧毁了。他们在 Oracle 8i 中引入了 XML 处理(通过在 PL/SQL 皮肤中交换 Java 类),为我们提供了完整的本地实现,包括 9i 中的 XMLTYPE,并且在 15 年后仍在修复 12c 中的问题。他们不会对 JSON 做同样的事情,尽管许多 JSON 功能只是用于处理不同括号的 XML 函数:-)
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多