数据仓库服务 GAUSSDB(DWS)-执行SQL语句:调用存储过程

时间:2023-11-22 14:18:17

调用存储过程

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

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

    1
    CallableStatement cstmt = myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}");
    

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

    1
    2
    3
    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
     9
    10
    11
    12
    //在数据库中已创建了如下存储过程,它带有out参数。
    create or replace procedure testproc 
    (
        psv_in1 in integer,
        psv_in2 in integer,
        psv_inout in out integer
    )
    as
    begin
        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(DWS)数据库的JDBC驱动程序不支持此方法。
    • GaussDB(DWS)数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。

  • 当游标作为存储过程的返回值时,如果使用JDBC调用该存储过程,返回的游标将不可用。
  • 存储过程不能和普通SQL在同一条语句中执行。
support.huaweicloud.com/devg-820-dws/dws_04_0095.html