Mik*_*ael 5 java oracle stored-procedures jdbc stored-functions
我有一个复杂的PL/SQL存储函数,我必须在JAVA中调用此函数.这是程序:
FUNCTION SUB_REPORT_INCOMPLETE(p_ACT_ID IN ACTIVITIES.ID%TYPE,
p_MISSING TO_SUB_MISSING) RETURN VARCHAR2;
Run Code Online (Sandbox Code Playgroud)
所以,正如你在这里看到的,我的第二个参数的类型是TO_SUB_MISSING,它是一个O_SUB_MISSING表:
CREATE OR REPLACE TYPE TO_SUB_MISSING AS TABLE OF O_SUB_MISSING;
CREATE OR REPLACE TYPE O_SUB_MISSING AS OBJECT (ACT_ID NUMBER, GIT_ID NUMBER, MISSING_QTY NUMBER);
Run Code Online (Sandbox Code Playgroud)
经过一些研究,我写了这段代码:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup(dataSourceName);
connection = dataSource.getConnection();
StructDescriptor structDescriptor = StructDescriptor.createDescriptor("O_SUB_MISSING", connection);
STRUCT[] structs = new STRUCT[listPieces.size()];
int ind = 0;
for (PieceEntity piece : listPieces) {
Object[] params = new Object[3];
params[0] = piece.getActId();
params[1] = piece.getGitId();
params[2] = piece.getMissingQty();
STRUCT struct = new STRUCT(structDescriptor, connection, params);
structs[ind++] = struct;
}
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("TO_SUB_MISSING", connection);
statement = connection.prepareCall(Constants.DECLARE_INCOMPLETE_MODUL);
statement.registerOutParameter(1, OracleTypes.VARCHAR);
statement.setLong(2, agmId);
statement.setArray(3, new ARRAY(desc, connection, structs));
statement.executeQuery();
Run Code Online (Sandbox Code Playgroud)
但是使用这段代码,我在StructDescriptor.createDescriptor行上得到了一个异常:
java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection
Run Code Online (Sandbox Code Playgroud)
我尝试使用我在某些stackoverflow帖子上找到的两个解决方案来解决此异常,但它不起作用.
解决方案1:
OracleConnection oraConn = (OracleConnection) new DelegatingConnection(connection).getInnermostDelegate();
Run Code Online (Sandbox Code Playgroud)
解决方案2:
OracleConnection oraConn = connection.unwrap(OracleConnection.class);
Run Code Online (Sandbox Code Playgroud)
第一个解决方案抛出相同的异常,第二个抛出以下异常:
java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.unwrap(Ljava/lang/Class;)Ljava/lang/Object;
Run Code Online (Sandbox Code Playgroud)
您知道我如何解决我的问题吗?
不是具体的解决方案,但它\xe2\x80\x99s 是一个提示: https: //community.oracle.com/thread/718072? tstart=832 \n也许这会帮助您解决问题。
\n 归档时间: |
|
查看次数: |
1759 次 |
最近记录: |