Detta är lite av en dålig egenskap hos SUB som inte är väldokumenterad. Metoden closeCursor fungerar inte när satsen har kört en lagrad procedur. Du måste använda metoden nextRowSet. Det här är vad jag använder
while($sth->nextRowSet())
{
$sth->fetchAll();
}
$sth->closeCursor();