【问题标题】:Oracle SODA : creating tables manuallyOracle SODA:手动创建表
【发布时间】:2021-09-19 20:47:59
【问题描述】:

我想使用 Oracle SODA,但是出于安全原因,从 java 应用程序连接到数据库的用户不能修改表。

我确实将“SODA_APP”授予架构,因此 SODA java lib 可以工作(它调用 SODA pl/sql 函数),但显然无法创建“权限不足”的集合

我可以在测试数据库中创建集合,并复制表结构。但我还必须复制元数据。

我知道这是因为文档说:

不要使用 SQL 删除作为集合基础的数据库表。 除了存储在其表中的文档之外,还有一个 集合具有元数据,该元数据也保留在 Oracle 数据库中。 删除集合表不会同时删除关联的 元数据。

参考:https://docs.oracle.com/cd/E56351_01/doc.30/e58124/soda_for_java.htm#ADSDA111

有谁知道集合的元数据在哪里/我如何手动创建(或复制)它?

谢谢。

【问题讨论】:

    标签: java oracle soda oracle-soda


    【解决方案1】:

    是的,正确。 USER_SODA_COLLECTIONS 字典视图报告当前用户创建的集合。

    https://docs.oracle.com/en/database/oracle/simple-oracle-document-access/adsdi/overview-soda.html#GUID-AFA0FE26-415B-4BC0-8545-06C38855D54C

    如果您想避免复制,可以将集合“映射”到现有集合。

    如果您想在现有的集合上创建一个集合,您应该能够使用创建集合的“MAP”模式。 SODA 创建一个集合,将其映射到现有模式中的表。为此,您需要在创建集合时在元数据中指定 "schemaName""tableName"

    {
      "schemaName": "<SCHEMA_NAME_OF_EXISTING_TABLE>",
      "tableName": "<EXISTING_TABLE_NAME>",
        ...your other fields in metadata...
    }
    

    另外,如果您希望此集合不可变,您可以在元数据中使用 "readOnly" 字段(将其设置为 TRUE)。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      因此,元数据位于此表中:

      XDB.JSON$COLLECTION_METADATA

      有当前用户的视图

      从 XDB.JSON$USER_COLLECTION_METADATA 中选择 *

      这看起来与记录在案的“user_soda_collections”视图相同。

      【讨论】:

        猜你喜欢
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多