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



我正在使用SODA for Java来存储和检索oracle 12c DB中的文档。 我正在遵循这个例子。

代码执行后我收到异常。

oracle.soda.rdbms.impl.SODAUtils$1OracleSQLException at oracle.soda.rdbms.impl.SODAUtils.makeExceptionWithSQLText(SODAUtils.java:112( at oracle.soda.rdbms.impl.SODAUtils.makeExceptionWithSQLText(SODAUtils.java:75( at oracle.soda.rdbms.impl.OracleDatabaseImpl.loadCollection(OracleDatabaseImpl.java:1338( at oracle.soda.rdbms.impl.OracleDatabaseImpl.openCollection(OracleDatabaseImpl.java:410( at oracle.soda.rdbms.impl.OracleDatabaseImpl.createCollection(OracleDatabaseImpl.java:348( at oracle.soda.rdbms.impl.OracleDatabaseImpl.createCollection(OracleDatabaseImpl.java:332( at oracle.soda.rdbms.impl.OracleDatabaseImpl.createCollection(OracleDatabaseImpl.java:321( at oracle.soda.rdbms.impl.OracleDatabaseImpl.access$100(OracleDatabaseImpl.java:62( at oracle.soda.rdbms.impl.OracleDatabaseImpl$OracleDatabaseAdministrationImpl.createCollection(OracleDatabaseImpl.java:1798( at 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:忽略语句 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445( at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396( at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879( at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450( at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192( at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531( at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204( at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1041( at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329( at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584( at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685( at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4714( at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376( at oracle.soda.rdbms.impl.OracleDatabaseImpl.loadCollection(OracleDatabaseImpl.java:1317( ...7 更多

爪哇代码

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();
}
}

此例外背后的原因是什么?

是否向创建集合的用户授予SODA_APP角色? 例如:

授予SODA_APP用户名此处;

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

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

最新更新