CREATE OR REPLACE PACKAGE table_ids AS TYPE return_cursor IS REF CURSOR; PROCEDURE get_next_session_id(session_cursor OUT return_cursor); END table_ids; / CREATE OR REPLACE PACKAGE BODY table_ids AS PROCEDURE get_next_session_id(session_cursor OUT return_cursor) IS BEGIN OPEN session_cursor FOR SELECT 'S'||lpad(session_id.nextval,5,'0') FROM dual; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'No more rows.'); WHEN OTHERS THEN raise_application_error(-20001, 'There was an undeterminable error.'); END get_next_session_id; #### sub executeStoredProcTestInfo { $input_parameters = shift; $num_of_output_cursors = shift; $stored_proc_name = shift; $schema = "LOGIN"; $password = "PSWD"; $database = "dbi:Oracle:DBNAME"; $dbh = createConnectionToDB($database, $schema, $password); $sql.= "BEGIN $stored_proc_name("; for ($i=1; $i<=scalar(@$input_parameters)+scalar(@$num_of_output_cursors); $i++) { if($i!= scalar(@$input_parameters)+scalar(@$num_of_output_cursors)) { $sql.=":temp_".$i; $sql.=","; } else { $sql.=":temp_".$i; } } $sql.="); END;"; #print $sql,"\n"; $sth = $dbh->prepare($sql); $counter = 1; @var_size_array = @$num_of_output_cursors; @var_input_array = @$input_parameters; foreach $item (@var_input_array) { $var = $counter - 1; $code = "\$sth->bind_param\(\":temp_$counter\", $item \)\;"; eval $code ; #print $code, "\n"; $counter++; } $counter_set = $counter; foreach $item (@$num_of_output_cursors) { $code="\$sth->bind_param_inout(\":temp_$counter\", \\\$temp_$counter, 0, \{ ora_type => ORA_RSET \})\;"; eval $code ; #print $code, "\n"; $counter++; } $sth->execute(); foreach $item (@$num_of_output_cursors) { $code = "\$table = \$temp_$counter_set->fetchall_arrayref\;"; eval $code ; #print $code, "\n"; $counter_set++; } $sth->finish; endConnection($dbh); return $table; } #### CREATE OR REPLACE PROCEDURE get_next_session_id (v_session_id OUT VARCHAR2) IS BEGIN SELECT 'S'||lpad(session_id.nextval,5,'0') INTO v_session_id FROM dual; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'No more rows.'); WHEN OTHERS THEN raise_application_error(-20001, 'There was an undeterminable error.'); END get_next_session_id; #### my $rv; my $func = $dbh->prepare(q{ BEGIN get_next_session_id(:rv); END; }); $func->bind_param_inout(":rv", \$rv, 6); $func->execute;