用户定义函数不能返回一个 BYTE 或 TEXT 值(总称为简单大对象)。然而,用户定义函数可以使用 REFERENCES 关键字,返回一个包含 BYTE 或 TEXT 对象指针的描述符。
下面的例子说明了如何在 SPL 例程中选择 TEXT 列然后返回一个值:
CREATE FUNCTION sel_text()
RETURNING REFERENCES text;
DEFINE blob_var REFERENCES text;
SELECT blob_col INTO blob_var
FROM blob_table WHERE key_col = 10;
RETURN blob_var;
END FUNCTION;对于作为查询的 Projection 列表中的列值的简单大对象,如在此示例中,返回的描述符中的指针根据 BYTE 或 TEXT 列定义从系统目录引用 sysblobs.spacename 值。
然而,对于不对应于永久表的列的简单大对象,指针引用定义了 UDR 的数据库的 dbspace 。这是当数据库服务器不指定 sysblobs 表的位置时, UDR 返回的 BYTE 或 TEXT 对象的缺省存储位置。
以下示例中的 DB-Access 会话创建两个例程 udr1 和 udr2,每个返回一个 TEXT 对象:CREATE DATABASE db WITH LOG;
CREATE TABLE t (c2 TEXT);
CREATE TABLE t1 (c2 TEXT);
LOAD FROM "t.unl" INSERT INTO t;CREATE FUNCTION udr1 ( param_1
REFERENCES TEXT DEFAULT NULL )
RETURNING REFERENCES TEXT
WITH (NOT VARIANT)
DEFINE var1 REFERENCES TEXT;
ON EXCEPTION
RETURN param_1;
END EXCEPTION;
SELECT t.c2 udr1_col1
INTO var1 FROM t; RETURN var1;
END FUNCTION;CREATE PROCEDURE udr2 ( OUT param_1
REFERENCES TEXT DEFAULT NULL )
RETURNING INT;
SELECT t.c2 udr1_col1
INTO param_1 FROM t;
RETURN 1;
END PROCEDURE;SELECT udr1(t.c2) query_1_col1 FROM t
INTO TEMP mytemp;SELECT c2, slv1 FROM t1
WHERE udr2(slv1#TEXT) > 0
INTO TEMP mytemp;在调用这些 UDR 的 SELECT 语句中,每个查询返回到 mytemp 临时表的 TEXT 对象存储在 db数据库的 dbspace 中 。
最后修改时间:2022-05-24 16:18:34
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




