How to pass VARRAY from C++ to oracle stored procedure

Hi,
I have googled a lot to find answer for this question...

Scenario: I have a stored procedure which dequeues messages to an array (dbms_aq.dequeue_array). This array is of type varchar2. I need to pass this array from C++ to stored procedure and get back the results from stored procedure in that array.

CREATE OR REPLACE PACKAGE Q_ARR AS
--
--
TYPE msg_arr IS VARRAY(100) OF VARCHAR2(32);

PROCEDURE DequeueMessageArray(p_msg_arr OUT msg_arr, p_arr_size IN OUT pls_integer);
--
END;
/

CREATE OR REPLACE PACKAGE BODY Q_ARR AS

l_queue_name VARCHAR2(20) := 'A_QUEUE';

PROCEDURE DequeueMessageArray(p_msg_arr OUT msg_arr, p_arr_size IN OUT pls_integer) IS
v_options DBMS_AQ.dequeue_options_t;
v_prop_arr DBMS_AQ.message_properties_array_t;
v_msgid_arr dbms_aq.msgid_array_t;
deq_count pls_integer;

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

IF (p_arr_size IS NULL) THEN
p_arr_size := 100;
END IF;

p_msg_arr.extend(p_arr_size);
v_prop_arr.extend(p_arr_size);

deq_count := DBMS_AQ.dequeue_array(
queue_name => l_queue_name,
dequeue_options => v_options,
array_size => p_msg_arr.count,
message_properties_array => v_prop_arr,
payload_array => p_msg_arr,
msgid_array => v_msgid_arr);
COMMIT;

dbms_output.put_line('Dequeued ' || deq_count || ' messages');

p_arr_size := deq_count;

END DequeueMessageArray;

END Q_ARR;
/

I am using OCIBindByName and OCIStmtExecute to bind and call the procedure.

I am not sure how to pass the array from c++ to stored proc. Can someone help?

Thanks,
M

Topic archived. No new replies allowed.