java - 如何在java中调用Oracle CURSOR返回过程

标签 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_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);

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

关于java - 如何在java中调用Oracle CURSOR返回过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913471/

相关文章:

java - json-simple 尝试从 JSON 中获取特定值

python - django oracle 安装程序抛出错误

plsql - Forall 语句中立即执行的编译问题

java - 使用 JaxB 解码具有唯一值

java - 将 int 保存到不断变化的文件中

oracle - 从 Oracle Cursor 批量收集列的子集

javascript - 修复确定符之间字符串最后一次出现的正则表达式

oracle - 存储过程: Cursor is bad?

java - cucumber-Junit 断言失败 - 无法断言 '£' 符号

java - 向 SQL 表添加用户定义的约束