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

时间:2014-02-20 16:16:19

标签: java oracle plsql

我在PHP中调用了这个Store Procedure,如何在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

需要一些帮助谢谢

1 个答案:

答案 0 :(得分:1)

与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);

...然后将其视为任何其他结果集。