返回首页

gbase数据、南大通用产品文档:GBase8scollectec 程序

更新日期:2024年09月11日

collect.ec 示例程序说明如何使用集合变量来访问 LIST、SET 和 MULTISET 列。该
SELECT 语句被认为是静态的,因为当编写程序时,确定它访问的列。
/*
**
** Sample use of collections in ESQL/C.
**
** Statically determined LIST, SET, and MULTISET collection
types.
*/

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 441 -

#include

static void print_collection(
const char *tag,
EXEC SQL BEGIN DECLARE SECTION;
parameter client collection c
EXEC SQL END DECLARE SECTION;
)
{
EXEC SQL BEGIN DECLARE SECTION;
int4 value;
EXEC SQL END DECLARE SECTION;
mint item = 0;

EXEC SQL WHENEVER ERROR STOP;
printf("COLLECTION: %s\n", tag);
EXEC SQL DECLARE c_collection CURSOR FOR
SELECT * FROM TABLE(:c);
EXEC SQL OPEN c_collection;
while (sqlca.sqlcode == 0)
{
EXEC SQL FETCH c_collection INTO :value;
if (sqlca.sqlcode != 0)
break;
printf("\tItem %d, value = %d\n", ++item, value);
}
EXEC SQL CLOSE c_collection;
EXEC SQL FREE c_collection;
}

mint main(int argc, char **argv)
{

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 442 -
EXEC SQL BEGIN DECLARE SECTION;
client collection list (integer not null) lc1;
client collection set (integer not null) sc1;
client collection multiset (integer not null) mc1;
char *dbase = "stores7";
mint seq;
char *stmt1 =
"INSERT INTO t_collections VALUES(0, "
"'LIST{-1,0,-2,3,0,0,32767,249}', 'SET{-1,0,-2,3}', "
"'MULTISET{-1,0,0,-2,3,0}') ";
EXEC SQL END DECLARE SECTION;

if (argc > 1)
dbase = argv[1];
EXEC SQL WHENEVER ERROR STOP;
printf("Connect to %s\n", dbase);
EXEC SQL connect to :dbase;

EXEC SQL CREATE TEMP TABLE t_collections
(
seq serial not null,
l1 list (integer not null),
s1 set (integer not null),
m1 multiset(integer not null)
);
EXEC SQL EXECUTE IMMEDIATE :stmt1;

EXEC SQL ALLOCATE COLLECTION :lc1;
EXEC SQL ALLOCATE COLLECTION :mc1;
EXEC SQL ALLOCATE COLLECTION :sc1;

EXEC SQL DECLARE c_collect CURSOR FOR
SELECT seq, l1, s1, m1 FROM t_collections;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 443 -
EXEC SQL OPEN c_collect;

EXEC SQL FETCH c_collect INTO :seq, :lc1, :sc1, :mc1;
EXEC SQL CLOSE c_collect;
EXEC SQL FREE c_collect;

print_collection("list/integer", lc1);
print_collection("set/integer", sc1);
print_collection("multiset/integer", mc1);

EXEC SQL DEALLOCATE COLLECTION :lc1;
EXEC SQL DEALLOCATE COLLECTION :mc1;
EXEC SQL DEALLOCATE COLLECTION :sc1;

puts("OK");
return 0;
}

GBase 8a MPP Cluster 集群面临的挑战:

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1286
1.
系统资源不受控情况下,
所有SQL 执行都会抢占资源,
这样会造成系统的不
稳定;
2.
系统资源被一条低优先级的SQL 大量占用,导致紧急SQL 无法按时完成;
3.
复杂SQL 在集群中往往会分多步执行,在并发情况下,同一SQL 的任务会
受资源限制,无法保证在所有节点间同步完成。
所以资源管理要解决的问题:
1.
系统资源能够按照策略分配使用;
2.
任务的执行要有优先级管理;
3.
复杂(多步)任务在集群中要有统一的管理策略(包括:资源分配、优先级、
执行顺序等)。

必须先在执行时设置 IFX_UPDDESC 环境变量,才能执行 UPDATE 语句的 DESCRIBE。

Value 是非 NULL 的值。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 178 -
NULL 值(此处意味着未设置 IFX_UPDDESC)禁用 describe-for-update 功能。任
何非 NULL 的值都会启用该功能。