dbms_aq.enqueue_array and type somewhere in package

hi!

today I tried to refactor some piece of pl/sql and the main concept was to replace
dbms_aq.enqueue calls within a loop with one dbms_aq.enqueue_array call.

During the development phase I made a mistake - I defined an array type
within a package body and while compilation was ok, a call to dbms_aq.enqueue_array was not.
The same went with moving the type to package header.
I could have been able to run this code, no errors reported during the call to
dbms_aq.enqueue_array, control went fine further, but I could not have got
a proper result - msgid array was simply empty. When I made a type seen within a schema,
all troubles went away.

And a question - does anyone know, how I should trace such case?
No messages in udump, no errors on screen - is that a correct behaviour
of a database or simply such errors are not traceable?

A case was performed on 10gR2/Solaris10SPARC.

Thanks in advance
Remigiusz

here short snippet of the wrong code, for working one needs to move anydata_array_t
to schema as a standalone type
-------------------------
create or replace
package aq_batch_pkg as
 type anydata_array_t is varray(1000) of anydata;
 g_payloads anydata_array_t := anydata_array_t();
 function add_to_buffer(p_msg in anydata) return pls_integer;
function enqueue_buffer(p_qname in varchar2, p_agname in varchar2) return pls_integer;
 procedure init_buffer;
end aq_batch_pkg;

create or replace
package body aq_batch_pkg as

function add_to_buffer(p_msg in anydata) return pls_integer as
 l_retval pls_integer := 1;
 l_cnt pls_integer := 0;
begin
 l_cnt := g_payloads.count;
 dbms_output.put_line('l_cnt:'||l_cnt);
 if l_cnt < 1000 then
   g_payloads.extend;
   g_payloads(l_cnt+1) := p_msg;
 else
   l_retval := 0;
 end if;
 return l_retval;
end;

function enqueue_buffer(p_qname in varchar2, p_agname in varchar2) return pls_integer as
 l_enq_opts       DBMS_AQ.enqueue_options_t;
 l_msg_props      DBMS_AQ.message_properties_array_t;
 l_msg_prop       DBMS_AQ.message_properties_t;
 l_msgids         DBMS_AQ.msgid_array_t;
 l_retval         PLS_INTEGER;
BEGIN
 l_msg_prop.sender_id := sys.aq$_agent(p_agname,   NULL,   NULL);
l_msg_props := DBMS_AQ.message_properties_array_t(l_msg_prop); l_msg_props.extend(g_payloads.count-1, 1);
 dbms_output.PUT_LINE('[enq] l_msg_props cnt:'||l_msg_props.count);
 dbms_output.PUT_LINE('[enq] g_payloads cnt:'||g_payloads.count);
 l_retval := DBMS_AQ.ENQUEUE_ARRAY(
      queue_name               => p_qname,
      enqueue_options          => l_enq_opts,
      array_size               => g_payloads.count,
      message_properties_array => l_msg_props,
      payload_array            => g_payloads,
      msgid_array              => l_msgids);
 COMMIT;
 -- czyszczenie bufora
 g_payloads.delete;
 if l_msgids.count>0 then
   for i in l_msgids.first..l_msgids.last loop
     dbms_output.PUT_LINE('[enqueue] raw '||i||':'||rawtohex(l_msgids(i)));
   end loop;
 else
   dbms_output.PUT_LINE('[enqueue] l_msgids is empty');
 end if;
 return l_retval;
END;

procedure init_buffer as
begin
 g_payloads.delete;
end;

end aq_batch_pkg;

--

------------------------------------------------------------------------
Remigiusz Sokolowski <rems@xxxxxxxx>
WP/PTI/DIP/ZAB (+04858) 52 15 770
MySQL v04.x,05.x; Oracle v10.x

Zastrzezenia:
1. Wylaczenie danej funkcjonalnosci oznacza, ze niezwlocznie przystapimy
  lub juz pracujemy nad jej uruchomieniem
2. Niniejsza wiadomosc stanowi jedynie wyraz prywatnych pogladow autora i nie jest w zadnym wypadku zwiazana ze stanowiskiem przedsiebiorstwa Wirtualna Polska S.A.
------------------------------------------------------------------------



"WIRTUALNA POLSKA" Spolka Akcyjna z siedziba w Gdansku przy ul.
Traugutta 115 C, wpisana do Krajowego Rejestru Sadowego - Rejestru
Przedsiebiorcow prowadzonego przez Sad Rejonowy Gdansk - Polnoc w
Gdansku pod numerem KRS 0000068548, o kapitale zakladowym
67.980.024,00  zlotych oplaconym w calosci oraz Numerze Identyfikacji
Podatkowej 957-07-51-216.
--
http://www.freelists.org/webpage/oracle-l


Other related posts: