返回首页

gbase数据、南大通用产品文档:GBase8cOracle 兼容模式启用重载时,调用存储过程

更新日期:2024年09月11日

打开参数behavior_compat_options='proc_outparam_override'后,JDBC 调用事先创建的
存储过程,步骤如下:
步骤1 调用Connection 的prepareCall 方法创建调用语句对象。
Connection conn = DriverManager.getConnection("url","user","password"); CallableStatement
cs = conn.prepareCall("{ CALL TEST_PROC(?,?,?) }");
步骤2 调用CallableStatement 的setInt 方法设置参数。
PGobject pGobject = new PGobject();
pGobject.setType("public.compfoo"); // 设置复合类型名,格式为“schema.typename”。
pGobject.setValue("(1,demo)"); // 绑定复合类型值,
格式为
“(value1,value2)”

cs.setObject(1,
pGobject);
步骤3 调用CallableStatement 的registerOutParameter 方法注册输出参数。
// 注册out 类型的参数,类型为复合类型,格式为“schema.typename”。
cs.registerOutParameter(2, Types.STRUCT, "public.compfoo");
步骤4 调用CallableStatement 的execute 执行方法调用。
cs.execute();
步骤5 调用CallableStatement 的getObject 方法获取输出参数。
PGobject result = (PGobject)cs.getObject(2);
// 获取out 参数
result.getValue(); // 获取复合类型字符串形式值。
result.getArrayValue(); //获取复合类型数组形式值,以复合数据类型字段顺序排序。
result.getStruct(); //获取复合类型子类型名,按创建顺序排序。
步骤6 调用CallableStatement 的close 方法关闭调用语句。
cs.close();

oracle 兼容模式开启参数后,调用存储过程必须使用{call proc_name(?,?,?)}形式调
用,调用函数必须使用{? = call func_name(?,?)}形式调用(等号左侧的“?”为函数
返回值的占位符,用于注册函数返回值)。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
80

参数behavior_compat_options='proc_outparam_override'行为变更后,业务需要重新
建立连接,否则无法正确调用存储过程和函数。

函数和存储过程中包含复合类型时,参数的绑定与注册需要使用schema.typename
形式。
// 在数据库创建复合数据类型。
CREATE TYPE compfoo AS (f1 int, f3 text);
// 在数据库中已创建了如下存储过程,它带有out 参数。
create or replace procedure test_proc (
psv_in in compfoo, psv_out out compfoo
)
as begin
psv_out := psv_in; end;
/
----结束

GetValues 方法
获得当前行中所有属性,返回属性的数量。

语法
[Visual Basic]
Public Overrides Function GetValues ( _

values As Object() _
) As Integer
[C#]
public override int GetValues(

Object[] values
)

GBase 8a 程序员手册ADO.NET 篇


- 246 -

南大通用数据技术股份有限公司

参数
1) values :获取的所有属性

实现
IDataRecord.GetValues(Object[])

使用 DBLANG 环境变量,可以指定 $GBASEDBTDIR 的子目录或 GBase 8s 产品使用的
已编译消息文件所在目录的完整路径名。

relative_path 是 $GBASEDBTDIR 的子目录。
full_path 是已编译消息文件的路径名。
缺省情况下,GBase 8s 产品将已编译消息放在 $GBASEDBTDIR/msg 目录的特定于
语言环境的子目录中。这些已编译消息文件具有文件扩展名 .iem。如果想要使用不同于
$GBASEDBTDIR/msg 的消息目录,以便可在其中存储创建的消息文件,必须执行下列步
骤:
要使用不同于 $GBASEDBTDIR/msg 的消息目录
1.使用 mkdir 命令来为消息文件创建适当的目录。
可将此目录放在 $GBASEDBTDIR 或 $GBASEDBTDIR/msg 目录下,
也可以将
它放在任何其他目录下。
2.将新目录的所有者和组设置为 gbasedbt,并将此目录的存取许可权设置为 755。

3.将 DBLANG 环境变量设置为新目录。如果这是 $GBASEDBTDIR 或
$GBASEDBTDIR/msg 的子目录,那么您只需要列示新目录的相对路径。否则,必须
指定该目录的全路径名。
4.将 .iem 文件或您创建的消息文件复制至 $DBLANG 指定的新消息目录。
消息目录中的所有文件应具有所有者和组 gbasedbt 以及存取许可权 644。
使用缺省美国英语语言环境的 GBase 8s 产品按以下顺序搜索消息文件:
1.
在 $DBLANG 中,如果 DBLANG 设置为全路径名的话
2.
在 $GBASEDBTDIR/msg/$DBLANG 中,
如果 DBLANG 设置为相对路
径名的话
3.
在 $GBASEDBTDIR/$DBLANG 中,
如果 DBLANG 设置为相对路径名
的话
4.
在 $GBASEDBTDIR/msg/en_us/0333 中
5.
在 $GBASEDBTDIR/msg/en_us.8859-1 中

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 154 -

6.
在 $GBASEDBTDIR/msg 中
7.
在 $GBASEDBTDIR/msg/english 中
有关消息的搜索路径的更多信息,
请参阅
《GBase 8s GLS 用户指南》
中对 DBLANG 的
描述。