ORA-06530: 引用未初始化的组合 ;

时间:2022-03-16 23:38:21

select * FROM TABLE(fun_test_1) ;
 
ORA-06530: 引用未初始化的组合
ORA-06512: 在 "PCISS.FUN_TEST_1", line 10
 
SQL>

---抛错代码

 1 CREATE OR REPLACE  TYPE table_test2 IS OBJECT(
 2 SID INTEGER ,
 3 sname VARCHAR2(50),
 4 age INT ,
 5 sex varchar2(2),
 6 addres Varchar2(100)
 7 );
 8 /
 9 CREATE OR REPLACE TYPE typ_test2_table IS TABLE OF table_test2 ;
10 /
11 CREATE OR REPLACE  FUNCTION fun_test_1  RETURN typ_test2_table PIPELINED AS 
12 rec_test2 test2%ROWTYPE ;
13 tab_test2 table_test2 ;
14 BEGIN 
15 SELECT * INTO rec_test2 FROM test2 t WHERE t.sid=1 ;
16  tab_test2.sid := rec_test2.sid  ;
17   tab_test2.sname := rec_test2.sname  ;
18      tab_test2.age := rec_test2.age  ;
19       tab_test2.sex := rec_test2.sex  ;
20          tab_test2.addres := rec_test2.addres  ;
21         PIPE ROW(tab_test2); 
22 RETURN ;
23 end fun_test_1;
24 /

---抛错原因;

 1 CREATE OR REPLACE FUNCTION FUN_TEST_1 RETURN TYP_TEST2_TABLE
 2   PIPELINED AS
 3   REC_TEST2 TEST2%ROWTYPE;
 4   TAB_TEST2 TABLE_TEST2 /* := TABLE_TEST2(NULL, NULL, NULL, NULL, NULL)*/
 5   ;
 6   CURSOR CUR IS
 7     SELECT E.EMPNO, E.ENAME, E.DEPTNO, 'na', E.JOB FROM EMP E;
 8 BEGIN
 9   SELECT * INTO REC_TEST2 FROM TEST2 T WHERE T.SID = 1;
10   TAB_TEST2.SID    := REC_TEST2.SID;
11   TAB_TEST2.SNAME  := REC_TEST2.SNAME;
12   TAB_TEST2.AGE    := REC_TEST2.AGE;
13   TAB_TEST2.SEX    := REC_TEST2.SEX;
14   TAB_TEST2.ADDRES := REC_TEST2.ADDRES;
15   PIPE ROW(TAB_TEST2);
16 
17   TAB_TEST2.SID    := 7788;
18   TAB_TEST2.SNAME  := 'admin';
19   TAB_TEST2.AGE    := 21;
20   TAB_TEST2.SEX    := '';
21   TAB_TEST2.ADDRES := '上海';
22   PIPE ROW(TAB_TEST2);
23 
24   OPEN CUR;
25   LOOP
26     FETCH CUR
27       INTO TAB_TEST2.SID,
28            TAB_TEST2.SNAME,
29            TAB_TEST2.AGE,
30            TAB_TEST2.SEX,
31            TAB_TEST2.ADDRES;
32   
33     EXIT WHEN CUR%NOTFOUND;
34     PIPE ROW(TAB_TEST2);
35   END LOOP;
36   close cur ;
37   RETURN;
38 END FUN_TEST_1;