返回首页

gbase数据、南大通用产品文档:GBase8s动态的例程名称规范

更新日期:2024年09月11日

通过在调用例程内构建被调用的例程的名称,
动态的例程名称规范允许您从另一 SPL 例程
执行 SPL 例程。
动态的例程名称规范简化您编写调用另一 SPL 例程的 SPL 例程的方式,
直到运行时才能知道另一例程的名称。
数据库服务器允许您在 EXECUTE PROCEDURE 或
EXECUTE FUNCTION 语句中指定 SPL 变量,而不是 SPL 例程的显式的名称。
在下图中,SPL 过程 company_proc 更新大型的公司销售表,然后,分配名
为 salesperson_proc 的 SPL 变量来保存更新另一较小表的动态地创建的 SPL 过程的名
称,这个较小的表包含个别销售人员的每月销售情况。
图: 动态的例程名称规范。
CREATE PROCEDURE company_proc ( no_of_items INT,
itm_quantity SMALLINT, sale_amount MONEY,
customer VARCHAR(50), sales_person VARCHAR(30) )

DEFINE salesperson_proc VARCHAR(60);

-- 更新公司表
INSERT INTO company_tbl VALUES (no_of_items, itm_quantity,
sale_amount, customer, sales_person);


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 316 -

-- 生成变量 salesperson_proc 的过程名称
LET salesperson_proc = sales_person || "." || "tbl" ||
current_month || "_" || current_year || "_proc" ;

-- 执行 salesperson_proc 变量指定的
-- SPL 过程
EXECUTE PROCEDURE salesperson_proc (no_of_items,
itm_quantity, sale_amount, customer)
END PROCEDURE;
在示例中,
过程 company_proc 接受五个参数,
并将它们插入至 company_tbl 内。
然后,
LET
语句使用不同的值和连接运算符 || 来产生要执行的另一 SPL 过程的名称。在 LET 语句
中:
sales_person
传给 company_proc 过程的参数。
current_month
系统日期中的当前月份。
current_year
系统日期中的当前年份。
因此,如果名为 Bill 的销售人员在 1988 年 7 月完成一笔销售,
则 company_proc 在 company_tbl 中插入一记录,并执行 SPL 过程bill.tbl07_1998_proc,更
新包含个别销售人员的每月销售情况的较小的表。

动态例程名称规范的规则
您必须定义保存动态地执行的 SPL 例程的名称的 SPL 变量为 CHAR、VARCHAR、
NCHAR 或 NVARCHAR 类型。您还必须为 SPL 变量提供一个有效的且非 NULL 的名
称。
在可执行动态的例程名称规范标识的 SPL 例程之前,该例程必须存在。如果你将有效的
SPL 例程的名称分配给该 SPL 变量,则 EXECUTE PROCEDURE 或 EXECUTE
FUNCTION 语句执行在该变量中包含其名称的例程,即使存在同名的内建的函数。
在 EXECUTE PROCEDURE 或 EXECUTE FUNCTION 语句中,您不可使用两个 SPL 变
量来创建形式为 owner.routine_name 的变量名称。
然而,
您可使用包含完全限定的例程名称
的 SPL 变量,例如,bill.proc1。下图同时展示这两种情况。
图: 包含完全限定的例程名称的 SPL 变量。
EXECUTE PROCEDURE owner_variable.proc_variable;
-- 不允许这样

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 317 -


LET proc1 = bill.proc1;
EXECUTE PROCEDURE proc1; -- 允许这样

在“视图”中点击“任务列表”
,可以打开任务列表。
说明:本工具目前只支持一个任务列表窗口,当任务列表关闭时,点击“任务列表”将会重新打
开任务列表,若任务列表已打开,点击“任务列表”不会再打开新的任务列表。

5 特殊功能说明

正确进行参数配置,可避免缩容时由于配置问题而导致的内存不足报错。

Gnode 配置参数在缩容情况下,最高值:
MAX_PARALLEL_DEGREE = ( PROCESS_COUNT > ((TOTAL_NODES_COUNT-1) //
(NEW_NODE_COUNT))
?
PROCESS_COUNT
/
((TOTAL_NODES_COUNT-1)
//
(NEW_NODE_COUNT)) : 1);

RESULT_BUFF_COUNT = (保留节点个数/被移除组的节点的个数) *
MAX_PARALLEL_DEGREE;
其中:

PROCESS_COUNT:CPU 个数;

TOTAL_NODES_COUNT:集群总节点个数;

NEW_NODE_COUNT:集群缩减掉或增加的节点个数;
最大配置内存公式:

RESULT_BUFF_COUNT * gbase_buffer_result + 其他堆内存配置参数
(data heap,temp heap)< 物理内存80%

Gnode 配置参数在缩容情况下,最高值:

TableParallel = 默认运行节点CPU 个数,设定后就是设定的值。
最大配置内存公式:

TableParallel * gbase_buffer_result + 其他堆内存配置参数(data heap,
temp heap)< 物理内存80%。