如何使用循环向 VARRAY 添加值

Din*_*age 3 plsql oracle11g varray

我有一个 VARRAY,我想通过使用循环向这个 VARRAY 添加元素。这是我到目前为止所尝试的。

DECLARE
TYPE code_array_  IS VARRAY(26) OF VARCHAR2(6);
codes_ code_array_;

BEGIN
FOR i IN 1..26 LOOP    
    codes_(i) := dbms_random.string('U',6);
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我一个错误

“ORA-06531:对未初始化集合的引用”

Ale*_*ole 6

正如错误消息所说,您需要初始化集合变量

...
BEGIN
  codes_ := code_array_();
  ...
Run Code Online (Sandbox Code Playgroud)

但是您还需要调整它的大小,或者在每次循环时使用一个扩展名:

  FOR i IN 1..26 LOOP    
    codes_.extend;
    ...
Run Code Online (Sandbox Code Playgroud)

或者在开始之前一次性延期:

...
BEGIN
  codes_ := code_array_();
  ...
  codes_.extend(26);
  FOR i IN 1..26 LOOP    
    ...
Run Code Online (Sandbox Code Playgroud)

您还可以使用后扩展大小来控制循环,以再次保存硬编码 26:

DECLARE
  TYPE code_array_ IS VARRAY(26) OF VARCHAR2(6);
  codes_ code_array_;
BEGIN
  codes_ := code_array_();
  codes_.extend(26);
  FOR i IN 1..codes_.count LOOP    
    codes_(i) := dbms_random.string('U',6);
  END LOOP;
END;
/

PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)

阅读有关集合的更多信息