【问题标题】:PLS-00201: identifier 'DBMS_SODA_ADMIN.DESCRIBE_COLLECTION' must be declaredPLS-00201:必须声明标识符“DBMS_SODA_ADMIN.DESCRIBE_COLLECTION”
【发布时间】:2019-12-17 02:13:24
【问题描述】:

我正在使用 SODA for Java 从 oracle 12c DB 存储和检索文档。 我正在关注这个example

执行代码后出现异常。

oracle.soda.rdbms.impl.SODAUtils$1OracleSQLException 在 oracle.soda.rdbms.impl.SODAUtils.makeExceptionWithSQLText(SODAUtils.java:112) 在 oracle.soda.rdbms.impl.SODAUtils.makeExceptionWithSQLText(SODAUtils.java:75) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.loadCollection(OracleDatabaseImpl.java:1338) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.openCollection(OracleDatabaseImpl.java:410) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.createCollection(OracleDatabaseImpl.java:348) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.createCollection(OracleDatabaseImpl.java:332) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.createCollection(OracleDatabaseImpl.java:321) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.access 100 美元(OracleDatabaseImpl.java:62) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl$OracleDatabaseAdministrationImpl.createCollection(OracleDatabaseImpl.java:1798) 在 com.cisco.salesconnect.lms.TestSoda.main(TestSoda.java:26) 引起:java.sql.SQLException:ORA-06550:第 2 行,第 3 列: PLS-00201:必须声明标识符“DBMS_SODA_ADMIN.DESCRIBE_COLLECTION” ORA-06550:第 2 行,第 3 列: PL/SQL:语句被忽略 在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445) 在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) 在 oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879) 在 oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450) 在 oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) 在 oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531) 在 oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204) 在 oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1041) 在 oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329) 在 oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584) 在 oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685) 在 oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4714) 在 oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376) 在 oracle.soda.rdbms.impl.OracleDatabaseImpl.loadCollection(OracleDatabaseImpl.java:1317) ... 7 更多

Java 代码

try(OracleConnection conn = (OracleConnection) DriverManager.getConnection(/*connection url*/)) {

        conn.setImplicitCachingEnabled(true);
        conn.setStatementCacheSize(50);

        OracleRDBMSClient cl = new OracleRDBMSClient();

        OracleDatabase db = cl.getDatabase(conn);

        db.admin().createCollection("MyFirstJSONCollection");

    } catch (SCExceptions | SQLException | OracleException e) {
        e.printStackTrace();
    }
}

这个异常背后的原因是什么?

【问题讨论】:

  • 包是installed properly,并且您连接的用户是否已被授予权限 - 如果您没有跳过任何步骤,大概是通过 SODA_APP 角色?

标签: java oracle oracle12c soda


【解决方案1】:

您是否将 SODA_APP 角色授予您在其下创建集合的用户?例如:

将 SODA_APP 授予 userNameHere;

如果你不这样做,你得到的错误就会发生。

【讨论】:

    【解决方案2】:

    在调用db.admin().createCollection("MyFirstJSONCollection"); 时执行的代码中某处引用了数据库中不存在的名为DBMS_SODA_ADMIN.DESCRIBE_COLLECTION 的对象。您应该检查架构DBMS_SODA_ADMIN 是否存在,以及该架构中是否存在名为DESCRIBE_COLLECTION 的对象。一种方法是执行查询,例如

    SELECT *
      FROM DBA_USERS u
      WHERE u.USERNAME = 'DBMS_SODA_ADMIN'
    
    SELECT *
      FROM DBA_OBJECTS o
      WHERE o.OWNER = 'DBMS_SODA_ADMIN' AND
            o.OBJECT_NAME = 'DESCRIBE_COLLECTION'
    

    如果缺少任何一个,则表明 Soda 数据库组件的安装要么未执行,要么未成功完成。如果这些事情确实存在,则表明您的代码连接的用户没有访问此对象所需的权限。

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2016-07-25
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多