java 调用oracle函数_java – 用Spring的SimpleJdbcCall来调用Oracle函数

我正在努力使用以下代码使其工作,搜索文档和论坛并坚持下去.

最后我决定请你帮忙.

我所拥有的是带有TYPES,FUNCTION声明和FUNCTION BODY声明的包.

将来我想使用SYNONYM到MYPACKAGE(这只是模拟 – 我的数据库中没有包和类型声明,但使用dblink到外部数据库和

Java代码来运行程序/函数,但现在我没有这个dblink可访问)和MYPACKAGE将通过dblink访问:

create public synonym dblink_MYPACKAGE for SOME_SCHEMA.MYPACKAGE@dblink_externalDB;

我将在Java代码中使用dblink_MYPACKAGE而不是MYPACKAGE.

(但这没关系吗?)外部数据库不是我们的,所以我们不能改变任何东西……

public class TestClassSpringBased {

private DataSource dataSource;

private SimpleJdbcCall jdbcCall;

@Override

public void testMe(Integer id) {

int iid = 1;

SqlParameterSource in = new MapSqlParameterSource().addValue("IN_1", iid);

Map out = jdbcCall.execute(in);

}

public DataSource getDataSource() {

return dataSource;

}

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

jdbcTemplate.setResultsMapCaseInsensitive(true);

this.jdbcCall = new SimpleJdbcCall(dataSource)

.withCatalogName("MYPACKAGE")

.withProcedureName("MYFUNCTION")

.withReturnValue()

.useInParameterNames("IN_1")

.declareParameters(

new SqlInOutParameter("IN_1", OracleTypes.NUMBER),

new SqlInOutParameter("OUT_1", OracleTypes.STRUCT, "MYPACKAGE.CUSTOMELEMENTSTYPE",

new SqlReturnType() {

public Object getTypeValue(CallableStatement cs, int colIndx, int sqlType,

String typeName) throws SQLException {

return null; //just let it work, the I will think what to write here

}

}));

}

}

create or replace

PACKAGE MYPACKAGE IS

TYPE CUSTOMELEMENTSTYPE_R IS RECORD (

C1 VARCHAR2(60),

C2 VARCHAR2(30)

);

TYPE CUSTOMELEMENTSTYPE IS TABLE OF CUSTOMELEMENTSTYPE_R

INDEX BY PLS_INTEGER;

FUNCTION MYFUNCTION(

IN_1 IN INTEGER, OUT_1 OUT CUSTOMELEMENTSTYPE )

RETURN VARCHAR2;

END;

create or replace

PACKAGE BODY MYPACKAGE IS

FUNCTION MYFUNCTION(

IN_1 IN INTEGER, OUT_1 OUT CUSTOMELEMENTSTYPE )

RETURN VARCHAR2 IS

BEGIN

SELECT * BULK COLLECT INTO OUT_1

FROM SOME_TABLE;

RETURN 'return param';

END MYFUNCTION;

END MYPACKAGE ;

错误是:

org.springframework.jdbc.UncategorizedSQLException:CallableStatementCallback;未分类SQL的SQLException [{? =调用MYPACKAGE.MYFUNCTION(?,?)}]; SQL状态[99999];错误代码[17074];无效的名称模式:MYPACKAGE.CUSTOMELEMENTSTYPE;嵌套异常是java.sql.SQLException:无效的名称模式:MYPACKAGE.CUSTOMELEMENTSTYPE

问题是只有OUT参数,相同的代码工作,当我没有传递OUT参数并运行它对另一个版本的MYFUNCTION,没有OUT参数.

我还尝试使用OracleTypes.ARRAY(无效的名称模式)和OracleTypes.OTHER(引起:java.sql.SQLException:错误的列类型:1111)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值