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:对未初始化集合的引用”
正如错误消息所说,您需要初始化集合变量:
...
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)