有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Informix存储过程返回值

我需要创建一个存储过程,它返回一个select语句,比如4-5列的值

我需要从Java应用程序调用它,这样我就不能将输出放入临时表中,因为该临时表无法从另一个会话访问。所以我基本上需要调用存储过程,然后根据返回值创建一个数组列表

返回的数据将是select * from table


共 (1) 个答案

  1. # 1 楼答案

    将存储过程视为返回值的SELECT语句

    在ESQL/C等语言中,您需要准备“EXECUTE PROCEDURE”语句,然后为其声明一个游标,然后在循环中打开、获取和关闭。类似的操作也应该在JDBC和Java中工作——可能的区别是,您可能不需要分离准备和执行阶段


    我会拼写“Java”——让我们想想;它以C开头。。。不是吗?像“C”

    在ESQL/C中,您将编写(忽略错误检查和变量声明):

    EXEC SQL PREPARE prep_stmt FROM "EXECUTE PROCEDURE CursoryProcedure(?,?,?)";
    EXEC SQL DECLARE cursor_nm FROM prep_stmt;
    EXEC SQL OPEN cursor_nm USING :hostvar1, :hostvar2, :hostvar3;
    while (SQLCODE == 0)
    {
        EXEC SQL FETCH cursor_nm INTO :receiver1, :receiver2, :receiver3,
                                      :receiver4, :receiver5, :receiver6;
        if (SQLCODE != 0)
            break;
        ...use the values in the receiverN variables...
    }
    EXEC SQL CLOSE cursor_nm;
    EXEC SQL FREE cursor_nm;
    EXEC SQL FREE prep_stmt;
    

    三个占位符问号表示传入存储过程的输入值;这些值在打开操作中传递给它。存储过程可以返回(零或)一行或多行数据;每一行依次处理,如图所示

    该代码与处理SELECT语句之间的唯一区别在于准备行:

    select_str = "SELECT * FROM A_Table WHERE Col1 = ? AND (Col2 = ? OR Col3 < ?)";
    EXEC SQL PREPARE prep_stmt FROM :select_str;
    

    现在,您必须解决如何将上面的ESQL/C转换为JDBC。您可能不需要太担心免费操作——甚至在ESQL/C中,这两个操作中的一个可能是多余的(但无害的)。但是,准备、声明、打开、循环获取和关闭序列将需要复制


    我假设您可以阅读手册并知道如何编写Informix存储过程,但以防万一:

    CREATE PROCEDURE CursoryProcedure(i INTEGER, j CHAR(10), k DATE)
        RETURNING CHAR(20) AS v1, INTEGER AS v2, DATE AS v3, 
                  VARCHAR(255) AS v4, INTEGER AS v5, INTEGER AS v6; 
        DEFINE v1 CHAR(20);
        DEFINE v2 INTEGER;
        DEFINE v3 DATE;
        DEFINE v4 VARCHAR(255);
        DEFINE v5 INTEGER;
        DEFINE v6 INTEGER;
        FOREACH SELECT *
                  INTO v1, v2, v3, v4, v5, v6
                  FROM Table
                 WHERE Col1 = i AND (Col2 = j OR Col3 < k)
            RETURN v1, v2, v3, v4, v5, v6 WITH RESUME;
        END FOREACH;
    END PROCEDURE;
    

    这或多或少是一个最小的过程,可以完成你通常不会编写一个简单返回所选值的过程,而不需要对数据做更多的处理