PLS-00201:必须声明标识符'DBMS_SODA_ADMIN.DESCRIBE_COLLECTION'

时间:2019-08-09 10:37:17

标签: java oracle oracle12c soda

我正在使用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();
    }
}

此异常的原因是什么?

2 个答案:

答案 0 :(得分:1)

在调用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数据库组件或未成功完成安装。如果确实存在这些内容,则表明您的代码所连接的用户没有访问此对象所需的权限。

答案 1 :(得分:1)

您是否将SODA_APP角色授予创建集合所依据的用户?例如:

将SODA_APP授予userNameHere;

如果没有,就会发生错误。