trim
是一个过程,用于从变长数组或嵌套表的末尾删除元素并销毁位置(以下简称为销毁元素)。
trim
的形式如下:
collection.trim()
:如果集合至少有一个元素,则TRIM从集合末尾销毁元素;否则,会引发预定义的异常SUBSCRIPT_BEYOND_COUNT
。collection.trim(index)
:如果集合末尾至少有n个元素,则从集合末尾销毁n个元素;否则,会引发预定义的异常SUBSCRIPT_BEYOND_COUNT
。
trim
对集合的内部大小进行操作。如果delete
删除一个元素但为其保留占位符,则trim
认为该元素存在(因为它依然占据一个位置)。因此,trim
可以销毁已删除的元素。PL/SQL不保留被销毁元素的占位符,因此,被销毁的元素不包含在集合的内部大小中,并且您无法通过为其分配有效值来恢复被销毁的元素。
说明
请不要依赖trim
和delete
之间的交互。将嵌套表视为固定大小的数组(仅使用delete
)或堆栈(仅使用trim
和extend
)。
示例
以下是一个销毁元素后访问的示例。
DECLARE
TYPE nt_type IS TABLE OF INT;
nt nt_type := nt_type(1);
BEGIN
RAISE NOTICE '%', nt(1);
nt.trim(); -- 销毁最后一个元素
RAISE NOTICE '%', nt(1); -- 访问越界
END;
结果显示如下:
NOTICE: 1
ERROR: subscript beyond count
CONTEXT: PL/SQL function inline_code_block line 7 at RAISE
以下是一个销毁过多的元素的示例。
DECLARE
TYPE nt_type IS TABLE OF INT;
nt nt_type := nt_type(1);
BEGIN
nt.trim(2); -- 销毁最后两个元素(超过集合内的元素个数)
END;
结果显示如下:
ERROR: subscript beyond count
CONTEXT: SQL statement "CALL nt.trim(2)"
PL/SQL function inline_code_block line 5 at CALL
文档内容是否对您有帮助?