在 PL/SQL 中初始化关联数组

Isa*_*man 6 plsql

使用 PL/SQL,假设我们已经声明了一个嵌套表类型及其实例,如下所示:

type nested_tab is table of pls_integer;
tab nested_tab;.

然后我们可以按如下方式初始化我们的嵌套表:

tab := nested_tab(1, 2, 3);.

我们可以做类似的事情来初始化关联数组吗?

换句话说,对于以下关联数组:

type associative_tab is table of varchar2(100) index by pls_integer;
a_tab associative_tab;

有没有比这更短的方法:

a_tab(1) := 'hello';
a_tab(2) := 'world';
...
a_tab(100) := '100th string';

用于初始化?

use*_*735 4

更新了 18c 及以上的答案

在 18c 中,Oracle 引入了限定表达式,也可用于初始化关联数组。文档中的示例:

DECLARE
  TYPE t_aa IS TABLE OF BOOLEAN INDEX BY PLS_INTEGER;
  v_aa1 t_aa := t_aa(1=>FALSE,
                     2=>TRUE,
                     3=>NULL);
BEGIN
  DBMS_OUTPUT.PUT_LINE(print_bool(v_aa1(1)));
  DBMS_OUTPUT.PUT_LINE(print_bool(v_aa1(2)));
  DBMS_OUTPUT.PUT_LINE(print_bool(v_aa1(3)));
END;
Run Code Online (Sandbox Code Playgroud)

另请参阅Steven FeuersteinEasy Initializing for Records and Arrays中的关联数组的限定表达式一章

原始答案高达 12c

否 - 没有初始化关联数组的快捷语法。与变量和嵌套表不同,关联数组没有集合构造函数

相反,您应该编写自己的初始化函数。请参阅声明关联数组常量中的示例。