CREATE OR REPLACE TYPE STRING_TABLE AS TABLE OF VARCHAR2(50); …… We define the following function in the package RV_TEST: FUNCTION collectionInputExampleTable( inputList IN STRING_TABLE) RETURN sys_refcursor AS tableCollection STRING_TABLE:=STRING_TABLE(); retCur sys_refcursor; BEGIN FOR i IN 1..inputList.count LOOP tableCollection.extend(1); tableCollection(i):=inputList(i); --outputList(i):=inputList(i); --DBMS_OUTPUT.put_line('ELEMENT:'||inputList(i)); END LOOP; OPEN retCur FOR SELECT * FROM TABLE (tableCollection); return retCur; EXCEPTION WHEN OTHERS THEN txnvs_db_util.tx_log( 3, 2, SQLCODE, SQLERRM, null ); RAISE; END collectionInputExampleTable; #### ….. print "\n============Stored Procedure=========\n"; my @arrParam=('Dusica 1','Dusica 2',"Dusica 3","Dusica 4","Dusica 5"); my $counter=0; my $plSqlCodeBlock = " DECLARE inArr TAXNET.STRING_TABLE:=TAXNET.STRING_TABLE('"; foreach my $arrEl( @arrParam ) { $plSqlCodeBlock .=$arrEl; if($counterprepare($plSqlCodeBlock); my $csr; $sth->bind_param_inout( ":retVal", \$csr, 0, { ora_type => ORA_RSET } ); $sth->execute(); while(@row = $csr->fetchrow_array) { #$csr->finish; print "\nList Element:$row[0]"; } $csr->finish; $sth->finish; $dbHandle->disconnect; print "\n============End=========<<<<<\n"; ….. #### ….. OPEN retCur FOR SELECT * FROM TABLE (tableCollection); …..