受防护或不受防护注意事项

创建用户定义的函数 (UDF) 时,请考虑是否使 UDF 成为不受防护的 UDF。

缺省情况下,将 UDF 创建为受防护的 UDF。 受防护指示数据库应在单独的线程中运行 UDF。 对于复杂的 UDF ,此分隔很有意义,因为它将避免生成唯一 SQL 游标名称之类的潜在问题。 不必担心资源冲突是坚持使用缺省值并将 UDF 创建为受防护 UDF 的一个原因。 使用 NOT FENCED 选项创建的 UDF 向数据库指示用户正在请求 UDF 可以在启动 UDF 的同一线程中运行。 Unfenced 是对数据库的建议,数据库仍可以决定以与受防护 UDF 相同的方式运行 UDF。

CREATE FUNCTION QGPL.FENCED (parameter1 INTEGER) 
RETURNS INTEGER LANGUAGE SQL
BEGIN
RETURN parameter1 * 3;
END;

CREATE FUNCTION QGPL.UNFENCED1 (parameter1 INTEGER) 
RETURNS INTEGER LANGUAGE SQL NOT FENCED
-- Build the UDF to request faster execution via the NOT FENCED option
BEGIN
RETURN parameter1 * 3;
END;