ORA-06512: at "PROCEDURE/PACKAGE", line 88
ORA-06512: at "PROCEDURE/PACKAGE", line 446
ORA-06512: at line 11
06530. 00000 - "Reference to uninitialized composite"
*Cause: An object, LOB, or other composite was referenced as a
left hand side without having been initialized.
*Action: Initialize the composite with an appropriate constructor
or whole-object assignment.
Cause:
This error would be found when using oracle collection table type, and trying to assign the value to the collect. When compiling the code, it would be fine. But, when execute the package/procedure, you will have this error message.
The error caused when trying to extend the define table type object without being initialized. See the scenario below:
CREATE TYPE obj_test AS OBJECT
(tst_id number,
tst_name VARCHAR2(50));
/
CREATE TYPE tab_test AS TABLE OF obj_test;
/
declare
l_tab_tst tab_test := tab_test();
begin
begin
l_tab_tst.extend;
l_tab_tst(l_tab_tst.last).tst_id := 22;
l_tab_tst(l_tab_tst.last).tst_name := 'TEST';
exception
when no_data_found then
null;
end;
end;
/
Solution:
To fix this, simply add initialized object line as shown below:
declare
l_tab_tst tab_test := tab_test();
begin
begin
l_tab_tst.extend;
l_tab_tst(l_tab_tst.last) := type_supplier(NULL, NULL);
l_tab_tst(l_tab_tst.last).tst_id := 22;
l_tab_tst(l_tab_tst.last).tst_name := 'TEST';
exception
when no_data_found then
null;
end;
end;
/