【问题标题】:Keep JSON in oracle database将 JSON 保存在 oracle 数据库中
【发布时间】:2018-04-04 18:25:21
【问题描述】:

我有一些 Java 中的 JSON 数据,我想保存在 Oracle 数据库中。我想将其保留在一个特定字段中,因为它不会被查询。该列应该使用什么 oracle 数据类型来存储 JSON 格式?我应该将它转换为字符串并保持原样,还是在 oracle 中有特定于 JSON 的东西。

【问题讨论】:

  • JSON 只是一种格式...你可以使用 CLOB
  • 如果您指的是 JSON 字符串,则在 Oracle 中存储为 CLOB。顺便说一句,如果您不询问为什么要保存?
  • 对不起,不查询意味着我不需要根据 JSON 中的数据编写任何条件。该表中还有其他列与 JSON 相关联,我想将它们放在一起。

标签: java json oracle


【解决方案1】:

如果是JSON,那么它就是一个字符串。所以我会考虑使用标准的 Oracle 文本类型来存储它,例如 CLOB 就像 cmets 建议的那样。官方Oracle documentation of storing JSON data in Oracle也可以派上用场。

【讨论】:

    【解决方案2】:

    Oracle 数据库原生支持JSON 数据和关系数据库特性,包括事务、索引、声明式查询和视图。与使用 SQL 数据类型 XMLType 存储的 XML 数据不同,JSON 数据使用 SQL 数据类型 VARCHAR2、CLOB 和 BLOB 存储在 Oracle 数据库中。如果可能,Oracle 建议您使用 BLOB 存储。特别是,这样做无需进行任何字符集转换(请参阅JSON: Character Sets and Character Encoding in Oracle Database)。

    VARCHAR2 或 NVARCHAR2 列的最大大小仅为 4kb。在 12c 下,如果您将 MAX_STRING_SIZE 服务器属性设置为 EXTENDED,则此限制可以增加到 32kb,但仍远不及 150kb。

    在检查约束中使用 IS JSON 以确保 JSON 数据格式严格(标准)

    CREATE TABLE DTI_REPORT
       (id          RAW (16) NOT NULL,
        date_loaded TIMESTAMP WITH TIME ZONE,
        dti_document CLOB
        CONSTRAINT ensure_json CHECK (dti_document IS JSON (STRICT)));
    
    
    INSERT INTO DTI_REPORT VALUES (
              SYS_GUID(),
              SYSTIMESTAMP,
              '{"Person"           : {"name":"Musa","age":45},
                "Report"           : "DTI0001",
                "Loans"            : {"loan1":{...},"loan2":{...}},
                "Salary"           : 4000,
                "DTI"           : "30%"}'
    );
    

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 2013-04-06
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 2011-10-14
      • 2012-04-05
      相关资源
      最近更新 更多