用 SPL 、C 或 Java™ 语言编写的 UDR 也可以支持 INOUT 参数。当调用 UDR
时,每个 INOUT 参数的值作为参量通过引用传递给 UDR 。
当 UDR 执行完成时,它能够为 INOUT 参数返回一个修改后的值给调用上下文。INOUT 参数可以是
GBase 8s
支持的任意数据类型,包括用户定义的和复杂数据类型和以下例外:
- Serial 类型(BIGSERIAL 、SERIAL 和 SERIAL8)
- 简单大对象类型(BYTE 和 TEXT)。
在以下示例中,CREATE PROCEDURE 语句注册一个带有单个 INOUT 参数的 C
例程:
CREATE PROCEDURE CALC ( INOUT param1 float )
EXTERNAL NAME "$GBASEDBTDIR/etc/myudr.so(calc)"
LANGUAGE C;
SPL 例程可以调用具有 OUT 和 INOUT 参数的其它 UDR,如果这些 UDR 用 SPL 或 C 语言编写。然而,SPL 例程不能调用参量包含 OUT 或
INOUT 参数的
Java UDR。
支持从 SPL 例程调用具有命名或未命名 ROW 参数的 UDR ,对 ROW 参数类型和调用的 UDR 的编程语言有以下依赖性:
- SPL 例程可以调用 ROW 参量是 IN 参数的 C UDR。但是不能调用 ROW 参量是 OUT 或 INOUT 参数的 C UDR 。
- SPL 例程可以调用具有任意参数类型(包括 IN 、OUT 和 INOUT)的 ROW 参量的 SPL UDR。
可以将 INOUT 参数分配给语句-局部变量(SLV),语句-局部变量在语句本地的变量表达式部分中描述。