南大通用——GBase8s——使用 REFERENCES 子句指向一个简单大对象

用户定义函数不能返回一个 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 中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值