鉴于这种:
DECLARE
TYPE T_ARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
MY_ARRAY T_ARRAY;
V_COUNT INTEGER;
Run Code Online (Sandbox Code Playgroud)
我想要做:
BEGIN
-- ... some code filling the MY_ARRAY array
-- obviously COUNT_ELEMENTS() does not exists, this is what I'm looking for :-)
V_COUNT := COUNT_ELEMENTS(MY_ARRAY);
DBMS_OUTPUT.PUT_LINE('My array containts ' || V_COUNT || ' elements.');
END;
Run Code Online (Sandbox Code Playgroud)
有什么比创建一个执行基本循环递增计数器的过程更好的方法吗?也许 PL/SQL 本机函数已经这样做了COUNT_ELEMENTS()
?
幸运的是,我在我必须维护的现有 PL/SQL 代码中发现了一种有效的“本机”行为:
V_COUNT := MY_ARRAY.COUNT;
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩。
用谷歌很难找到这个,因为“计数”更频繁地指的SELECT COUNT(...)
是可以在 SQL 查询中找到的......
如果是嵌套表(即没有INDEX BY BINARY_INTEGER
),您也可以使用CARDINALITY
V_COUNT := CARDINALITY(MY_ARRAY);
Run Code Online (Sandbox Code Playgroud)
重要区别:如果嵌套表为 NULL,则COUNT
引发异常,CARDINALITY
返回 NULL。
归档时间: |
|
查看次数: |
79185 次 |
最近记录: |