GBase 8s SQL 指南:语法 南大通用数据技术股份有限公司 1663 数据类型 C Java™ SPL BIGSERIAL X X X BLOB X
CLOB X
BYTE X X
TEXT X X
COLLECTION
X
LIST
X
MULTISET
X
ROW
X
SET
X
SERIAL X X X SERIAL8 X X X 在 GBase 8s ,中如果在 Return 子句中使用复杂数据类型,那么发出调用的用户 定义例程必须定义相应的复杂类型的变量,以容纳 C 或 SPL 用户定义函数返回 的值。 用户定义的函数可以返回数据库中定义的 opaque 或 distinct 数据类型的值。 SPL 函数返回的 DECIMAL 值的缺省精度是 16 位数字。要让函数以不同的有 意义的数字位数返回 DECIMAL ,您必须在 Return 子句中显式地指定返回精 度。 使用 REFERENCES 子句指向一个简单大对象 用户定义函数不能返回一个 BYTE 或 TEXT 值(总称为简单大对象)。然而, 用户定义函数可以使用 REFERENCES 关键字,返回一个包含 BYTE 或 TEXT 对象指针的描述符。下面的例子说明了如何在 SPL 例程中选择 TEXT 列然后返 回一个值: CREATE FUNCTION sel_text() RETURNING REFERENCES text; DEFINE blob_var REFERENCES text;
GBase 8s SQL 指南:语法 南大通用数据技术股份有限公司 1664 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
GBase 8s SQL 指南:语法 南大通用数据技术股份有限公司 1665 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 中。 从另一个数据库返回值 对于存取本地数据库值为的表和视图的 UDR,只有下列数据类型可作为返回值: