返回首页

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

更新日期:2024年09月11日

从可变数组或者嵌套表尾部删除元素。有如下形式:
l
TRIM:当集合至少有一个元素,则从集合尾部移除一个元素。
l
TRIM(n):如果集合至少有n个元素,则从集合尾部移除n个元素。
TRIM针对的是集合内部大小。DELETE删除元素会保留占位符,而TRIM认为元素还存
在,所以TRIM可以删除被DELETE的元素。
CREATE OR REPLACE PROCEDURE P_5_16 AS
nt nt_type := nt_type(11, 22, 33, 44, 55, 66);

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 71 -

BEGIN
i := nt.FIRST;
IF i IS NULL THEN
DBMS_OUTPUT.PUT_LINE('nt is empty');
ELSE
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE('nt.(' || i || ') = ');
DBMS_OUTPUT.PUT_LINE( nt(i));
i := nt.NEXT(i);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('---');

nt.TRIM; -- Trim last element
i := nt.FIRST;
IF i IS NULL THEN
DBMS_OUTPUT.PUT_LINE('nt is empty');
ELSE
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE('nt.(' || i || ') = ');
DBMS_OUTPUT.PUT_LINE( nt(i));
i := nt.NEXT(i);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('---');

nt.DELETE(4); -- Delete fourth element
i := nt.FIRST;
IF i IS NULL THEN
DBMS_OUTPUT.PUT_LINE('nt is empty');
ELSE
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE('nt.(' || i || ') = ');
DBMS_OUTPUT.PUT_LINE( nt(i));
i := nt.NEXT(i);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('---');

nt.TRIM(2); -- Trim last two elements
i := nt.FIRST;
IF i IS NULL THEN
DBMS_OUTPUT.PUT_LINE('nt is empty');

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 72 -

ELSE
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE('nt.(' || i || ') = ');
DBMS_OUTPUT.PUT_LINE( nt(i));
i := nt.NEXT(i);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('---');
END;

--Result:
--nt.(1) = 11
--nt.(2) = 22
--nt.(3) = 33
--nt.(4) = 44
--nt.(5) = 55
--nt.(6) = 66
---
--nt.(1) = 11
--nt.(2) = 22
--nt.(3) = 33
--nt.(4) = 44
--nt.(5) = 55
---
--nt.(1) = 11
--nt.(2) = 22
--nt.(3) = 33
--nt.(5) = 55
---
--nt.(1) = 11
--nt.(2) = 22
--nt.(3) = 33
---

功能说明
GBase 8a MPP Cluster 中的LEAVE 语句用于退出循环结构,因此该语句也只能出
现在LOOP、REPEAT 和WHILE 结构中,LEAVE 语句通常被放在IF 结构中以实
现根据条件退出循环结构。同样的,在使用LEAVE 语句时必须为包含该语句的
循环结构定义标签,然后在使用该语句处指定该标签。
语法格式
LEAVE label

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1363
示例
示例1:LEAVE...
gbase> DELIMITER //
gbase> DROP PROCEDURE IF EXISTS doiterate //
Query OK, 0 rows affected
gbase> CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SET @x = p1;
END //
Query OK, 0 rows affected
gbase> DELIMITER ;
gbase> CALL doiterate(1);
Query OK, 0 rows affected
gbase> SELECT @x;
+------+
| @x
|
+------+
|
10 |
+------+
1 row in set

示例
示例1:两个操作数都是整型。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
745
gbase> SELECT 3/5 FROM dual;
+--------+
| 3/5
|
+--------+
| 0.6000 |
+--------+
1 row in set
示例2:除数为0,返回值为NULL。
gbase> SELECT 102/(1-1) FROM dual;
+-----------+
| 102/(1-1) |
+-----------+
|
NULL |
+-----------+
1 row in set
说明
只有当在一个结果被转换到一个整数的上下文中执行时,除法才会
以BIGINT 进行算术计算。