PL/SQL:计算数组元素的最佳方法?

Fro*_*y Z 16 oracle plsql

鉴于这种:

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()

Phi*_*lᵀᴹ 29

我认为这就是你所追求的:

V_COUNT := MY_ARRAY.COUNT;
Run Code Online (Sandbox Code Playgroud)


Fro*_*y Z 8

幸运的是,我在我必须维护的现有 PL/SQL 代码中发现了一种有效的“本机”行为:

V_COUNT := MY_ARRAY.COUNT;
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩。

用谷歌很难找到这个,因为“计数”更频繁地指的SELECT COUNT(...)是可以在 SQL 查询中找到的......

  • [here's](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#CIHGJCHF) 文档链接:-) (5认同)

Wer*_*eit 6

如果是嵌套表(即没有INDEX BY BINARY_INTEGER),您也可以使用CARDINALITY

V_COUNT := CARDINALITY(MY_ARRAY);
Run Code Online (Sandbox Code Playgroud)

重要区别:如果嵌套表为 NULL,则COUNT引发异常,CARDINALITY返回 NULL。