oracle - 将数据传递给另一个集合对象内的集合 - oracle
问题描述
我创建了一个集合来传递数据并在程序中使用:
Create or Replace type Search_Type AS Object(
ID Number(38),
SF_ID Varchar(25),
PF_ID Varchar(25),
C_ID SYS.ODCIVARCHAR2LIST
);
Create or Replace Type Search_Array AS Table of Search_Type;
我正在调用如下程序:
SET SERVEROUTPUT ON
DECLARE
v_S_ID Search_Array;
v_C_ID SYS.ODCIVARCHAR2LIST;
BEGIN
v_S_ID := Search_Array();
v_O_ID := SYS.ODCIVARCHAR2LIST();
v_O_ID.Extend(2);
v_O_ID(1) := '4';
v_O_ID(2) := '5';
v_S_ID.EXTEND(4);
v_S_ID(1) := Search_Type(1,'2','3',v_C_ID);
FOR i IN v_S_ID.first..v_S_ID.last LOOP dbms_output.put_line(--'Iteration: '
-- || i ||
v_S_ID(i).id
|| ', '
|| v_S_ID(i).SF_ID
|| ', '
|| v_S_ID(i).PF_ID
|| ', '
|| v_S_ID(i).C_ID.count);
END LOOP;
END;
我收到以下错误:
Error report -
ORA-06531: Reference to uninitialized collection
ORA-06512: at line 17
06531. 00000 - "Reference to uninitialized collection"
*Cause: An element or member function of a nested table or varray
was referenced (where an initialized collection is needed)
without the collection having been initialized.
*Action: Initialize the collection with an appropriate constructor
or whole-object assignment.
解决方案
您的代码中缺少一些我在以下代码中作为内联注释提到的内容:
SQL> SET SERVEROUT ON
SQL> DECLARE
2 V_S_ID SEARCH_ARRAY;
3 V_C_ID SYS.ODCIVARCHAR2LIST;
4 V_O_ID SYS.ODCIVARCHAR2LIST; -- added this
5 BEGIN
6 V_S_ID := SEARCH_ARRAY();
7 V_O_ID := SYS.ODCIVARCHAR2LIST();
8 V_C_ID := SYS.ODCIVARCHAR2LIST(); -- added this
9 V_O_ID.EXTEND(2);
10 V_O_ID(1) := '4';
11 V_O_ID(2) := '5';
12 V_S_ID.EXTEND(1); -- CHANGED THIS FROM 4 TO 1
13 V_S_ID(1) := SEARCH_TYPE(
14 1,
15 '2',
16 '3',
17 V_C_ID
18 );
19 FOR I IN V_S_ID.FIRST..V_S_ID.LAST LOOP DBMS_OUTPUT.PUT_LINE(--'Iteration: '
20 -- || i ||
21 V_S_ID(I).ID
22 || ', '
23 || V_S_ID(I).SF_ID
24 || ', '
25 || V_S_ID(I).PF_ID
26 || ', '
27 || V_S_ID(I).C_ID.COUNT);
28 END LOOP;
29
30 END;
31 /
1, 2, 3, 0
PL/SQL procedure successfully completed.
SQL>
推荐阅读
- android - GitAction - Git 提取失败,退出代码:1
- c# - 为什么 XmlSerializer 无法在 .Net Core 中序列化枚举值但在 .NET Framework 中工作正常
- javascript - 如何在视口内包含卡片轮播?
- javascript - 使用 webpack mini-css-extract-plugin。导入多个css文件时,publicPath的img url中的哈希值不同
- kubernetes - 如何在 Minikube 上正确设置 hostPath 持久卷?
- swift - 在 Swift 上解码可选参数时出错
- c++ - 缓冲区溢出漏洞利用无法按预期工作
- java - CA 证书和我们可以从挂锁下载的证书有什么区别?
- python - 需要从 while 循环的输出创建新文件
- mysql - 我无法使用 shell 将值插入 mysql 表