@@ -18,48 +18,27 @@ create or replace type body ut_data_value_collection as
1818
1919 constructor function ut_data_value_collection(self in out nocopy ut_data_value_collection, a_value anydata) return self as result is
2020 begin
21- self.init(a_value, $$plsql_unit);
22- return;
23- end;
24-
25- overriding member function is_null return boolean is
26- l_is_null boolean;
27- l_data_is_null pls_integer;
28- l_sql varchar2(32767);
29- l_cursor number;
30- l_status number;
31- begin
32- if self.data_value is null then
33- l_is_null := true;
34- --check if typename is a schema based object
35- else
36- --XMLTYPE doesn't like the null being passed to ANYDATA so we need to check if anydata holds null Object/collection
37- l_sql := '
21+ self.self_type := $$plsql_unit;
22+ self.init(a_value, 'collection');
23+ if a_value is not null then
24+ execute immediate '
3825 declare
39- l_data '||self.data_value .gettypename()||';
26+ l_data '||a_value .gettypename()||';
4027 l_value anydata := :a_value;
41- x integer;
28+ l_status integer;
4229 begin
43- x := l_value.getCollection(l_data);
44- :l_data_is_null := case when l_data is null then 1 else 0 end;
45- end;';
46- l_cursor := sys.dbms_sql.open_cursor();
47- sys.dbms_sql.parse(l_cursor, l_sql, dbms_sql.native);
48- sys.dbms_sql.bind_variable(l_cursor,'a_value',self.data_value);
49- sys.dbms_sql.bind_variable(l_cursor,'l_data_is_null',l_data_is_null);
50- begin
51- l_status := sys.dbms_sql.execute(l_cursor);
52- sys.dbms_sql.variable_value(l_cursor,'l_data_is_null',l_data_is_null);
53- sys.dbms_sql.close_cursor(l_cursor);
54- exception when others then
55- if sys.dbms_sql.is_open(l_cursor) then
56- sys.dbms_sql.close_cursor(l_cursor);
57- end if;
58- raise;
59- end;
60- l_is_null := ut_utils.int_to_boolean(l_data_is_null);
30+ l_status := l_value.getCollection(l_data);
31+ if l_data is not null then
32+ :l_count := l_data.count;
33+ end if;
34+ end;' using in self.data_value, out self.elements_count;
6135 end if;
62- return l_is_null;
36+ return;
37+ end;
38+
39+ overriding member function get_object_info return varchar2 is
40+ begin
41+ return self.data_type||' [ count = '||self.elements_count||' ]';
6342 end;
6443
6544 member function is_empty return boolean is
0 commit comments