CREATE procedure dbo.sp_updateStorageSystem @type varchar(20), @model varchar(20), @serialnumber varchar(20), @codeversion varchar(20), @disks varchar(10), @IPAddress varchar(15), @setupID varchar(4) as Begin declare @exists int set @exists = 0 if exists (Select 1 From storageSystem Where serialnumber=@serialnumber) begin set @exists = 1 update storageSystem set type=@type, model=@model, codeversion=@codeversion, disks=@disks where serialnumber=@serialnumber return @exists end else begin insert into storageSystem (type, model, serialnumber, codeversion, disks, IPAddress) values (@type, @model, @serialnumber, @codeversion, @disks,@IPAddress) end End GO here's my perl code: eval { $sql = q{ BEGIN :rv := sp_updateStorageSystem(parameter1_in => ?, parameter2_in => ? ); END; }; $sth = $dbh->prepare( $sql ); }; if ($@) { warn "prepare stored procedure failed. \n"; } for($count=0; $count < scalar(@IP); $count++) { for($sCount=0; $sCount < $s_count; $sCount++) { eval { $sth->bind_param(1, $ssID[$sCount], SQL_VARCHAR); $sth->bind_param(2, $IP[$count], SQL_VARCHAR); $sth->execute(); #$dbh->commit(); }; if( $@ ) { warn "Database error: $@\n"; #$dbh->rollback(); #just die if rollback is failing } } }