为用户定义例程指定 OUT 参数

注册一个 GBase 8s 的用户定义的例程时,可以使用关键字 OUT 来指定列表中的任何一个参数是 OUT 参数。每个 OUT 参数对应例程通过指针直接返回的一个只。例程通过指针返回的值是显式返回的任何值以外的一个额外值。

在注册了带有一个或多个 OUT 参数的用户定义函数以后,可以在 SQL 语句中把函数和语言-局部变量(SLV)一起使用。(关于语句-局部变量的信息,请参阅语句本地的变量表达式。)

如果指定了任何 OUT 参数,并且使用 GBase 8s 样式的参数,参量会通过引用传递给 OUT 参数。OUT 参数在确定例程特征符时没有意义。

例如,下面对 C 用户定义函数的声明允许通过参数 y 返回一个额外值:
int my_func( int x, int *y );
用 CREATE FUNCTION 语句注册一个 C 函数与此类似:
CREATE FUNCTION my_func( x INT, OUT y INT )
        RETURNING INT
        EXTERNAL NAME "/usr/lib/local_site.so"
        LANGUAGE C
        END FUNCTION; 
下一个示例中,该 Java™ 方法通过传递返回一个额外值:
public static String allVarchar(String arg1, String[] arg2)
        throws SQLException
        { 
        arg2[0] = arg1;
        return arg1; 
        }
要将这作为 UDF 注册,请使用与以下示例相似的语句:
CREATE FUNCTION all_varchar(VARCHAR(10), OUT VARCHAR(7)) 
        RETURNING VARCHAR(7)
        WITH (class = "jvp")
        EXTERNAL NAME 'gbasedbt.testclasses.jlm.Param.allVarchar(java.lang.String, 
        java.lang.String[ ])'
        LANGUAGE JAVA;