JDK8 Oracle18C com.oracle.database.jdbc:ojdbc8:19.3.0.0(之前是用的ojdbc6,但是ojdbc6直接连自定义方法都找不到,后面换成ojdbc8)
Java代码:
try (DruidPooledConnection connection = dataSource.getConnection();
CallableStatement cs = connection.prepareCall(call)) {
// 参数填充 并 执行
cs.setString(1, projectId);
cs.setString(2, requestName);
cs.setString(3, requestType);
// 生成 数组 参数
OracleConnection unwrap = OracleUtils.unwrap(connection);
String[] strings = numbers.toArray(new String[0]);
Array d_numbers = unwrap.createOracleArray("M_API.M_TYPE", strings);
cs.setArray(4, d_numbers );
cs.registerOutParameter(5, OracleTypes.NUMBER);
cs.registerOutParameter(6, OracleTypes.VARCHAR);
cs.registerOutParameter(7, OracleTypes.VARCHAR);
cs.execute();
int requestId = cs.getInt("request_id");
String requestDate = cs.getString("request_date");
String message = cs.getString("message");
result.setRequestId(requestId);
result.setRequestDate(requestDate);
result.setMessage(message);
} catch (SQLException e) {
log.error(e.getMessage(), e)
}
自定义type的声明(m_table中id的类型是varchar2(100 char)):
M_TYPE是放在M_API包里的
TYPE M_TYPE IS
TABLE OF m_table.id%TYPE
INDEX BY BINARY_INTEGER;
存储过程的声明:
PROCEDURE CreateNSR(project_id IN VARCHAR2,
request_name IN VARCHAR2,
request_type IN VARCHAR2,
d_numbers m_api.m_type,
request_id OUT NUMBER,
request_date OUT VARCHAR2,
message OUT VARCHAR2)
目前这块生成数组传到Oracle之后执行报错,使用C#调用这个存储过程是正常的
排查这个数组传递到Oracle接受参数之后,下标是从0开始的,但是C#传过去的是1开始的。
执行代码Oracle会返回"ORA-01403: no data found"。
这块怎么改才能正常运行?
求解答!