返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

GBA-02IS-0003
错误码
错误标识
错误信息
GBA-02IS-0003

alloc: %s
错误出现原因
分配insert 内存错误

GBase 8a MPP Cluster 产品手册
7 附录
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1631
分析与建议
可能的原因是:
内存不足,
可以利用top 查看内存是否有剩余,
可在释放足够内
存后重试一次

使用 RETURN 语句来指定 SPL 函数将哪些值(如果有的话)返回给调用上下
文。
语法

用法
在 GBase 8s 中,对于向后兼容性,您可以在 CREATE PROCEDURE 语句中使
用 RETURN 语句创建 SPL 函数。然而,通过在 CREATE FUNCTION 语句中

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1237
只使用 RETURN ,您可以保留使用 CREATE FUNCTION 来定义返回值的例程
的约定,并为其它例程保留 CREATE PROCEDURE。
SPL 函数中的所有 RETURN 语句必须和定义该函数的 CREATE FUNCTION
(或 CREATE PROCEDURE)语句的 RETURNING 子句相一致。表达式的任何
RETURN 列表在基数上必须与函数定义的 RETURNING 子句的数据类型的有序
列表相匹配,并且在数据类型方面必须与其兼容。
或者,即使 RETURNING 子句列出了一个或多个数据类型,RETURN 语句也不
能指定表达式。在这种情况下,没有指定表达式的 RETURN 语句等于将预期的
NULL 值的数目返回给调用上下文。只有将 SPL 函数声明为不返回任何值时,
不带有任何表达式的 RETURN 语句才可以存在。否则,它返回 NULL 值。
以下 SPL 函数有两个有效的 RETURN 语句:
CREATE FUNCTION two_returns (stockno INT) RETURNING CHAR (15);
DEFINE des CHAR(15);
ON EXCEPTION (-272) -- if user does not have select privilege
RETURN; -- return no values.
END EXCEPTION;
SELECT DISTINCT descript INTO des FROM stock
WHERE stock_num = stockno;
RETURN des;
END FUNCTION;
在前面的示例中调用函数的程序应测试是否没有返回值并进行相应的操作。
WITH RESUME 关键字
如果使用 WITH RESUME 关键字,则在执行 RETURN 语句后,SPL 函数的下
一个调用(对下一个 FETCH 或 FOREACH 语句)从跟随 RETURN 语句的语
句开始。任何执行 RETURN WITH RESUME 语句的函数必须在 FOREACH 循
环或 SELECT 的 FROM 子句中被调用。如果 SPL 例程执行 RETURN WITH
RESUME 语句,则 GBase 8s ESQL/C 应用程序中的 FETCH 语句可以调用 SPL
例程。
以下示例显示另一个 UDR 可调用的游标函数。在 RETURN WITH RESUME 语句将每
个值返回到调用的 UDR 或程序后,在下一次调用 series 时执行 series 的下一

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1238
行。如果变量 backwards 等于零(0),则没有值返回给调用的 UDR 或程序,并
停止 series 的执行:
CREATE FUNCTION series (limit INT, backwards INT) RETURNING INT;
DEFINE i INT;
FOR i IN (1 TO limit)
RETURN i WITH RESUME;
END FOR;
IF backwards = 0 THEN
RETURN;
END IF;
FOR i IN (limit TO 1 STEP -1)
RETURN i WITH RESUME;
END FOR;
END FUNCTION; -- series
从另一个数据库返回值
如果 SPL 函数使用 Return 子句从本地 GBase 8s 实例的另一个数据库返回值,
则支持将以下数据类型作为返回的数据类型:

不透明的内置数据类型

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

以上两行中引用的内置类型的 DISTINCT

此列表中任何 DISTINCT 数据类型的 DISTINCT

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

任何不透明的内置数据类型

BOOLEAN

LVARCHAR

不透明数据类型 DISTINCT

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

BOOLEAN DISTINCT

LVARCHAR DISTINCT

此列表中出现的任何 DISTINCT 类型的 DISTINCT
只有在 DISTINCT 类型显式转换为内置类型时,UDR 才能从其它 GBase 8s 实
例的数据库返回这些 DISTINCT 类型。DISTINCT 数据类型的定义,它们的类型
层次结构,以及它们的强制转型在参与分布式操作的数据库中必须完全相同。对
于使用上一列表中的数据类型作为参数或返回数据类型的跨服务器 UDR 中的查
询或其它 DML 操作,必须在每个参与数据库中定义 UDR ,参与的 GBase 8s
实例必须支持数据类型为跨服务器操作中的返回值。
有关 GBase 8s 可在分布式操作中访问的数据类型的其它信息,请参阅分布式查
询中的数据类型。
外部函数和迭代器函数
在 SPL 程序中,如果外部函数不是迭代器函数,则可以使用 C 或 Java™ 语言
外部函数作为 RETURN 语句的表达式。迭代器函数是返回一行或多行数据的外
部函数(因而需要游标来执行)。
SPL 迭代函数必须包含 RETURN WITH RESUME 语句。有关在查询的 FROM
子句中通过虚拟表接口使用迭代器函数的信息,请参阅迭代器函数。

1)查询源库数据
select * from t1@gbase_link;
2)查询源库数据插入到目标库中
insert into t11 (select * from t1@gbase_link) ;
3)查询目标库数据插入到源数据库中
insert into t1@gbase_link (select * from t11) ;
4)上传语句到源数据库中执行
passthrough link oracle_link1 using 'insert into t12
values(1,3.14157,default,1,10,default,312,default,0.000012,defau
lt,5,default,1,82309574.797,10908,10.686,default,6.89,default,34
546546,\'\')';
或者
set @sql = 'passthrough link testlink using ?';
prepare stmt from @sql;

GBase 8a MPP Cluster 透明网关手册
- 8 -
南大通用数据技术股份有限公司
set @param1 = 'create table t12(
id int,
primary key(id)
)';
execute stmt using @param1;
deallocate prepare stmt ;
更多关于db-link 的用法,可参考《GBase 8a MPP Cluster 集群DBLink 使
用手册》