【问题标题】:How to call Oracle CURSOR return procedure in java如何在java中调用Oracle CURSOR返回过程
【发布时间】:2014-02-20 16:16:18
【问题描述】:

我在 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

需要帮助谢谢

【问题讨论】:

    标签: java oracle plsql


    【解决方案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);
    

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

    【讨论】:

    • 感谢您的回复 Alex,这个String dbCall = "{ ?=call pa_internal_admin.fn_search_level_1(?) }"; 给了我SQLException caught: ORA-06550: line 1, column 13: 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 ,第二个给了我SQLException caught: Non supported SQL92 token at position: 6: BEGIN
    • 感谢 Alex 经过一番修改后它起作用了。 String dbCall = "{ ? = call pa_internal_admin.fn_search_level_1(?) }"; proc = dbConn.connection().prepareCall( dbCall ); proc.registerOutParameter(1, OracleTypes.CURSOR); proc.setString(2, searchText);
    • @Zed420 - 抱歉,错过了您第一条评论的通知。它不喜欢什么;我不确定你最终做了什么不同 - 它需要 = 周围的空格?我应该对BEGIN 版本更加小心,我已经混淆了语法。哦。
    猜你喜欢
    • 2022-07-21
    • 2012-01-13
    • 1970-01-01
    • 2010-11-02
    • 2012-01-23
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多