返回首页

gbase数据、南大通用产品文档:GBase8sifx_lo_def_create_spec() 函数

更新日期:2024年09月11日

ifx_lo_def_create_spec() 函数分配并初始化 LO-specification 结构。
语法

mint ifx_lo_def_create_spec(LO_spec)
ifx_lo_create_spec_t **LO_spec;
LO_spec
指向指向包含初始化的字段的新的 LO-specification 结构的指针的指针。

用法
ifx_lo_def_create_spec() 函数创建并初始化新的 LO-specification 结构
ifx_lo_create_spec_t。ifx_lo_def_create_spec() 函数以恰当的空值初始化新的
ifx_lo_create_spec_t 结构,
并将它的地址放置在 LO_spec 指针中。
在数据库服务器存储该
大对象时,数据库服务器将空值翻译为应该用于存储特征的系统指定的缺省含义。
由于 ifx_lo_def_create_spec() 函数为 ifx_lo_create_spec_t 结构分配内存,因此,当
您停止使用该结构时,您必须调用 ifx_lo_spec_free() 函数来释放内存。
返回代码
0
函数成功。
<0
函数不成功,且返回值指示失败的原因。

任务列表中点击选中任务,点击“定时启动”
,会弹出定时设置界面,如下
图:



GBase Mingration Toolkit 迁移工具手册
南大通用数据技术股份有限公司

- 15 -

图 4-12 定时启动界面
设置完毕后,点击“确定”按钮即可,到相应的时间任务会按照定时设定
来启动。

返回子句指定用户定义函数返回的一个或多个值的数据类型。可以在 UDR 定义
中使用本段。
语法
返回子句

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1662

元素
描述
限制
语法
parameter
在这里为 UDR 返回的
参数声明的名称
必须在 UDR 返回的参数中是唯
一的。如果 UDR 任何一个返回
值有名称,那么所有返回值都要
有名称。
标识

用法
在 GBase 8s 中,对于向后兼容性,您可以使用 CREATE PROCEDURE 语句创
建 SPL 函数。(即,可以在 CREATE PROCEDURE 语句中包含 Return 子
句)。但使用 CREATE FUNCTION 创建返回一个或多个值的新的 SPL 例程。
在返回子句表明返回何种数据类型以后,可以在语句块的任何位置使用 SPL 的
RETURN 语句,返回和返回子句中的值对应的 SPL 变量。
对返回值的限制
SPL 函数可以在 Return 子句中指定多个数据类型。
外部函数(以 C 或 Java™ 语言编写的函数)在 Return 子句中只能指定一个数
据类型。但如果外部函数是迭代函数,那么它可以返回多行数据。有关更多信
息,请参阅 ITERATOR。
SQL 数据类型的子集
用户定义的函数(UDF)可以返回的内置 SQL 数据类型取决于语言。
有关更多信息,请参阅下面的列表。另见数据类型。
用给定的语言编写的 UDF 可以返回除下表中标记为 X 的类型的任何数据类型的
值。

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,只有下列数据类型可作为返回值:


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1666
元素
描述
限制
语法
built-in _
non-opaque
非 Opaque 的内置数
据类型的名称
不能是 BIGSERIAL、
BYTE 、SERIAL 、
SERIAL8 或 TEXT
数据类型
max
最大大小(字节)。
缺省值为 2048。
必须是整数,1 ≤ max
≤ 32,739
精确数值
opaque_UDT 用户定义的 Opaque
数据类型的名称
必须显式强制转型为内置
类型,通过在每个参与的
数据中定义强制转型
标识符
如果 Return 子句从本地 GBase 8s 示例的另一个数据库返回一个值(或多个值,
在 SPL 函数的情况中),返回的数据类型支持为下列数据类型:

不 Opaque 的内置数据类型

大多数内置 opaque 数据类型,在跨数据库事务中的数据类型 中列出

基于在此列表中标识的内置类型的 DISTINCT 类型

基于此列表中任一 DISTINCT 类型的 DISTINCT 类型

显式转换为此列表中的任一数据类型的用户定义类型(UDT)
UDF 和所有的 DISTINCT 类型、透明 UDT 、不数据类型层次结构和强制转型
在每个数据库中必须具有相同的定义。相同的数据类型限制适用于外部函数从本
地 GBase 8s 实例的另一个数据库返回的值。有关跨同一个数据库服务器实例的
两个或多个数据库的分布操作中支持的数据类型的详细信息,请参阅跨数据库事
务中的数据类型。有关在分布式事务中对 DISTINCT 数据类型有效的数据类型层
次结构,请参阅分布式操作中的 DISTINCT 类型。
但是,从其他 GBase 8s 实例的数据库,UDF 只能指定以下作为参数或返回的数
据类型:

内置不透明的数据类型

BOOLEAN

LVARCHAR

DISTINCT 的透明的内置类型

DISTINCT BOOLEAN

DISTINCT LVARCHAR

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1667

DISTINCT 在此列表中的 DISTINCT 类型
UDF 的定义和任何数据类型层次结构、强制转型和 DISTINCT 类型必须在每个
参与的数据库中一致。除了在上一列表中标识的 BOOLEAN 、DISTINCT 和
LVARCHAR 数据类型之外,UDF 不能在跨服务器函数调用中返回其他内置不透
明数据类型或不透明 UDT。
有关跨两个或多个 GBase 8s 实例的分布式操作中支持的数据类型的详细信息,
请参阅跨服务器事务中的数据类型。有关在分布式事务中对 DISTINCT 数据类型
有效的数据类型层次结构,请参阅 分布式操作中的 DISTINCT 类型。
命名返回参数
可以为 SPL 例程返回的参数或外部函数返回的单个值声明名称。
如果 SPL 例程返回多个值,您必须为所有返回参数声明名称,否则就一个都不声
明。名称必须唯一。这里是一个已命名参数的实例:
CREATE PROCEDURE p (inval INT DEFAULT 0)
RETURNING INT AS serial_num,
CHAR(10) AS name,
INT AS points;
RETURN (inval + 1002), "Newton", 100;
END PROCEDURE;
执行此 UDR 将会返回:
serial_num name points
1002 Newton 100
返回参数名和例程实体中的任何变量名之间没有关系。例如,可以定义一个函数
返回 INTEGER as xval,但是在同一函数中,叫做 xval 的变量可以是
INTERVAL YEAR TO MONTH 数据类型。
游标函数和非游标函数
游标函数允许从返回值生成的结果集中反复依次取得各返回值。这样的函数是隐
式迭代函数。
只返回一组值(如表的一行中的一列或几列)的函数是非游标函数。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1668
返回子句可以出现在游标函数或非游标函数中。在下面的例子中,返回子句如果
出现在非游标函数中,可以返回零个(0)或一个值。但如果这个子句和游标函数
相关联,则它会返回表的多行,返回的每一行包含零个或一个值:
RETURNING INT;
在以下示例中,Return 子句如果出现在非游标函数中,可以返回零个(0)或两
个值。然而,如果这个子句和游标函数相关联,则它会返回表的多行,返回的每
一行包含零个或两个值:
RETURNING INT, INT;
在前面的两个示例中,接收函数或程序都必须适当编写以接受函数返回的信息。