云数据库 GAUSSDB-执行SQL语句:创建和调用存储过程
时间:2025-03-14 09:57:34
创建和调用存储过程
GaussDB 支持通过JDBC调用存储过程,前置条件是数据库建连完成、连接对象为conn。
创建存储过程testproc如下:
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 inout integer ) AS BEGIN psv_inout := psv_in1 + psv_in2 + psv_inout; END; / |
调用存储过程testproc如下:
- 调用Connection的prepareCall方法创建调用语句对象cstmt。
1
CallableStatement cstmt = conn.prepareCall("{? = CALL testproc(?,?,?)}");
- 调用CallableStatement的setInt方法设置参数。
1 2 3
cstmt.setInt(2, 50); cstmt.setInt(1, 20); cstmt.setInt(3, 90);
- 调用CallableStatement的registerOutParameter方法注册输出参数。
1
cstmt.registerOutParameter(4, Types.INTEGER); // 注册out类型的参数,类型为整型。
- 调用CallableStatement的execute方法执行SQL语句。
1
cstmt.execute();
- 调用CallableStatement的getInt方法获取out输出参数。
1
int out = cstmt.getInt(4);
- 调用CallableStatement的close方法关闭调用语句对象cstmt。
1
cstmt.close();

- 一些JDBC驱动程序提供命名参数的方法来设置参数。命名参数的方法允许根据名称而不是顺序来设置参数,若参数有默认值,则可以不用指定参数值就可以使用此参数的默认值。即使存储过程中参数的顺序发生了变更,也不必修改应用程序。目前GaussDB数据库的JDBC驱动程序不支持此方法。
- GaussDB数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。
- 使用conn.prepareCall("{? = CALL testproc(?,?,?)}")执行存储过程绑定参数时,可以按照占位符的顺序绑定参数,注册第一个参数为出参。也可以按照存储过程中的参数顺序绑定参数,注册第四个参数为出参,上述用例为此场景,注册第四个参数为出参。
- 当游标作为存储过程的返回值时,如果使用JDBC调用该存储过程,返回的游标将不可用。
- 存储过程不能和普通SQL在同一条语句中执行。
- 存储过程中inout类型参数必须注册出参。
support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-0071.html