云数据库 GaussDB-执行SQL语句:调用存储过程

时间:2023-11-01 16:22:17

调用存储过程

GaussDB 支持通过JDBC直接调用事先创建的存储过程,步骤如下:

  1. 调用Connection的prepareCall方法创建调用语句对象。

    12
    Connection myConn = DriverManager.getConnection("url","user","password");CallableStatement cstmt = myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}");

  2. 调用CallableStatement的setInt方法设置参数。

    123
    cstmt.setInt(2, 50); cstmt.setInt(1, 20);cstmt.setInt(3, 90);

  3. 调用CallableStatement的registerOutParameter方法注册输出参数。

    1
    cstmt.registerOutParameter(4, Types.INTEGER);  //注册out类型的参数,类型为整型。

  4. 调用CallableStatement的execute执行方法调用。

    1
    cstmt.execute();

  5. 调用CallableStatement的getInt方法获取输出参数。

    1
    int out = cstmt.getInt(4);  //获取out参数

    示例:

     1 2 3 4 5 6 7 8 9101112
    //在数据库中已创建了如下存储过程,它带有out参数create or replace procedure testproc (    psv_in1 in integer,    psv_in2 in integer,    psv_inout in out integer)asbegin    psv_inout := psv_in1 + psv_in2 + psv_inout;end;/

  6. 调用CallableStatement的close方法关闭调用语句。

    1
    cstmt.close();
    • 很多的数据库类如Connection、Statement和ResultSet都有close()方法,在使用完对象后应把它们关闭。要注意的是,Connection的关闭将间接关闭所有与它关联的Statement,Statement的关闭间接关闭了ResultSet。
    • 一些JDBC驱动程序还提供命名参数的方法来设置参数。命名参数的方法允许根据名称而不是顺序来设置参数,若参数有默认值,则可以不用指定参数值就可以使用此参数的默认值。即使存储过程中参数的顺序发生了变更,也不必修改应用程序。目前GaussDB数据库的JDBC驱动程序不支持此方法。
    • GaussDB数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。
    • myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}"),执行存储过程绑定参数时,可以按照占位符的顺序绑定参数,注册第一个参数为出参,也可以按照存储过程中的参数顺序绑定参数,注册第四个参数为出参,上述用例为此场景,注册第四个参数为出参。
    • 当游标作为存储过程的返回值时,如果使用JDBC调用该存储过程,返回的游标将不可用。
    • 存储过程不能和普通SQL在同一条语句中执行。
    • 存储过程中inout类型参数必需注册出参。

support.huaweicloud.com/distributed-devg-v3-opengauss/gaussdb-12-0062.html