如何在Java中调用Oracle CURSOR返回过程 [英] How to call Oracle CURSOR return procedure in java

查看:63
本文介绍了如何在Java中调用Oracle CURSOR返回过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在PHP中调用了此存储过程,如何在JDBC中实现呢?

I have this Store Procedure being called in PHP, How can I do this in JDBC ?

$searchText = $_POST [ 'searchText1' ];
$sql = 'BEGIN :rc := pa_internal_admin.fn_search_level_1 ( :searchText ); END;';
oci_bind_by_name( $stmt, ":searchText", $searchText, 20 );

这就是我的称呼方式

String dbCall = "{call pa_internal_admin.fn_search_level_1(?,?)}";
proc = dbConn.connection().prepareCall( dbCall );
proc.setString(1, searchText);
proc.registerOutParameter(2, OracleTypes.CURSOR);

但是得到这个;

SQLException caught: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'FN_SEARCH_LEVEL_1' ORA-06550: line 1, column 7: PL/SQL: Statement ignored

需要一些帮助谢谢

推荐答案

与PHP大致相同:

String dbCall = "{ ? = call pa_internal_admin.fn_search_level_1(?) }";
proc = dbConn.connection().prepareCall( dbCall );
proc.registerOutParameter(1, OracleTypes.CURSOR);
proc.setString(2, searchText);

或者,如果您愿意,可以更相似:

Or if you prefer, to be even more similar:

String dbCall = "BEGIN ? := pa_internal_admin.fn_search_level_1(?); END;";

您试图将其称为带有两个参数的过程,而不是带有一个参数的函数.您不能在通话中随意更改它.

You tried to call it as a procedure with two parameters, rather than a function with one; you can't arbitrarily change that in your call.

您可以使用以下方法使光标返回:

You can get the cursor back with:

OracleResultSet rSet = (OracleResultSet) proc.getCursor(1);

...,然后将其像其他任何结果集一样对待.

... and then treat it like any other result set.

这篇关于如何在Java中调用Oracle CURSOR返回过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆