“语句本地的变量声明”在对定义一个或多个 OUT 或 INOUT 参数的用户定义的函数的调用中声明语句本地的变量(SLV)。
CREATE FUNCTION find_location(a FLOAT, b FLOAT, OUT y INTEGER) RETURNING VARCHAR(20) EXTERNAL NAME "/usr/lib/local/find.so" LANGUAGE C;
在此示例中,find_location( ) 接受两个表示纬度和经度的 FLOAT 值,并返回带有额外的表示最近城市的人口等级的 INTEGER 类型的值的城市名称。
SELECT zip_code_t FROM address WHERE address.city = find_location(32.1, 35.7, rank # INT) AND rank < 101;
该函数表达式将两个 FLOAT 值传递到 find_location( ) 并声明名为 rank 的 INT 类型的 SLV。在此情况下,find_location( ) 将返回距离纬度 32.1 和经度 35.7 最近的城市(可能是人口稠密的地区)的名称,其人口等级在 1 与 100 之间。然后,该语句返回对应于那个城市的邮政编码。
-- invalid SELECT statement SELECT title, contains(body, 'dog and cat', rank # INT), rank FROM documents;
当您声明 SLV 时,您指定的数据类型必须与 CREATE FUNCTION 语句中对应的 OUT 或 INOUT 参数的数据类型相同。如果您使用不同的但相兼容的数据类型,比如 INTEGER 和 FLOAT,则数据库服务器自动地在数据类型之间执行强制转型。
在 UDF 的调用将 OUT 或 INOUT 参数的值指定到 SLV 之后,您可在同一查询的其他部分引用该 SLV。要获取更多信息,请参阅 语句本地的变量表达式。