如何在java中调用Oracle游标返回过程

如何在java中调用Oracle游标返回过程,java,oracle,plsql,Java,Oracle,Plsql,我在PHP中调用了这个存储过程,如何在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_interna

我在PHP中调用了这个存储过程,如何在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);
或者,如果您愿意的话,可以更相似:

String dbCall = "BEGIN ? := pa_internal_admin.fn_search_level_1(?); END;";
您试图将其作为具有两个参数的过程而不是具有一个参数的函数来调用;你不能在电话里随意改变

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

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

。。。然后像对待任何其他结果集一样对待它。

感谢您的回复Alex,这
String dbCall=“{?=call pa_internal_admin.fn_search_level_1(?)}”给我
SQLException捕获:ORA-06550:第1行,第13列:PLS-00306:调用'FN_SEARCH_LEVEL_1'时参数的数量或类型错误ORA-06550:第1行,第7列:PL/SQL:Statement-ignored
,第二个给了我
SQLException-capture:Non-supported SQL92-token-at-position:6:BEGIN
谢谢Alex,经过一点修改后它成功了<代码>字符串dbCall=“{?=call pa_internal_admin.fn_search_level_1(?)}”;proc=dbConn.connection().prepareCall(dbCall);进程registerOutParameter(1,OracleTypes.CURSOR);过程设置字符串(2,搜索文本)@Zed420-抱歉,错过了您第一次发表评论的通知。它不喜欢什么;我不确定你最终做了什么不同的事情-它需要
=
周围的空格?我应该更小心使用
BEGIN
版本,我把语法弄混了。哦。