返回首页

gbase数据、南大通用产品文档:GBase8s将 SPL 例程用作触发操作

更新日期:2024年09月11日

触发器最强大的功能可能是能够将 SPL 例程作为触发操作进行调用,调用 SPL 例程的
EXECUTE PROCEDURE 或 EXECUTE FUNCTION 语句允许您将数据从触发表传递至
SPL 例程,还允许您使用由 SPL 例程返回的数据更新触发表。SPL 还允许您定义变量、
对其指定数据、进行比较以及使用过程语句来完成触发操作内的复杂任务。

将数据传至 SPL 例程
可以在 EXECUTE PROCEDURE 或 EXECUTE FUNCTION 语句的参数列表中将数据传
递至 SPL 例程。以下示例中的 EXECUTE PROCEDURE 语句将值从 items 表
的 quantity 和 total_price 列传递至 SPL 例程 calc_totpr:
CREATE TRIGGER upd_totpr
UPDATE OF quantity ON items
REFERENCING OLD AS pre_upd NEW AS post_upd
FOR EACH ROW(EXECUTE PROCEDURE calc_totpr(pre_upd.quantity,
post_upd.quantity, pre_upd.total_price) INTO total_price);
将数据传递至 SPL 例程允许您在该例程执行的操作中使用数据值。

使用 SPL

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

在之前触发列中的 EXECUTE PROCEDURE 语句调用以下示例所示的 SPL 例程。在更
新 items 表中的 quantity 时,
该过程使用 SPL 计算需要对total_price 列作出的更改。
该过程
接收 quantity 的旧值和新值以及 total_price 的旧值。它用旧的总价除以旧的数值来得出单
价。然后用新的数量乘以单价来得出新的总价。
CREATE PROCEDURE calc_totpr(old_qty SMALLINT, new_qty SMALLINT,
total MONEY(8)) RETURNING MONEY(8);
DEFINE u_price LIKE items.total_price;
DEFINE n_total LIKE items.total_price;
LET u_price = total / old_qty;
LET n_total = new_qty * u_price;
RETURN n_total;
END PROCEDURE;
在本示例中,SPL 允许触发器派生不能直接从触发表获得的数据。

用 SPL 例程中的数据更新非触发列
在触发操作内,
EXECUTE PROCEDURE 语句的 INTO 子句允许您更新触发表中的非触发
列。下例中的 EXECUTE PROCEDURE 语句调用包含 INTO 子句(该子句引
用 total_price 列)的 calc_totpr SPL 过程:
FOR EACH ROW(EXECUTE PROCEDURE calc_totpr(pre_upd.quantity,
post_upd.quantity, pre_upd.total_price) INTO total_price);
更新到 total_price 中的值是 SPL 过程结束时由 RETURN 语句返回的。
对触发语句作用的
每一行更新 total_price 列。

示例
使用gs_install 脚本进行GBase 8c 安装。
gs_install -X /opt/software/gbase/clusterconfig.xml
Parsing the configuration file.
Check preinstall on every node.
Successfully checked preinstall on every node.
Creating the backup directory.
Successfully created the backup directory.
begin deploy..
Installing the cluster.
begin prepare Install Cluster..
Checking the installation environment on all nodes.
begin install Cluster..
Installing applications on all nodes.
Successfully installed APP.
begin init Instance..
encrypt cipher and rand files for database.
Please enter password for database:
Please repeat for database:
begin to create CA cert files
The sslcert will be generated in /opt/gbase/cluster/app/share/sslcert/om
Cluster installation is completed.
Configuring.
Deleting instances from all nodes.

GBase 8c 工具参考手册
南大通用数据技术股份有限公司
227
Successfully deleted instances from all nodes.
Checking node configuration on all nodes.
Initializing instances on all nodes.
Updating instance configuration on all nodes.
Check consistence of memCheck and coresCheck on DN nodes.
Successful check consistence of memCheck and coresCheck on all nodes.
Configuring pg_hba on all nodes.
Configuration is completed.
Successfully started cluster.
Successfully installed application.

biginttoasc() 函数将 BIGINT 类型值转换为 C char 类型值。
语法
mint biginttoasc(bigintv, strng_val, len, base)
const bigint bigintv
char *strng_val
mint len
mint base
bigintv
要转换为文本字符串的 bigint 值。
strng_val
指向包含文本字符串的字符缓冲区的第一个字节的指针。
len
以字节计的 strng_val 的大小,对于空终止符为负 1。
base
输出的数值进制。支持 10 进制和 16 进制。其他值导致 10 进制。

返回代码
0
转换成功。
<0
转换失败。