Neste caso em particular, uma sequência é a solução correta, conforme mencionado. Mas se em alguma situação futura você precisar atualizar algo e retornar um valor na mesma declaração, você pode usar o
RETURNING
cláusula:UPDATE atable SET foo = do_something_with(foo) RETURNING foo INTO ?
Se o código de chamada for PL/SQL, substitua o ? com uma variável PL/SQL local; caso contrário, você pode vinculá-lo como um parâmetro de saída em seu programa.
Edit:Desde que você mencionou Perl, algo assim deve funcionar (não testado):
my $sth = $dbh->prepare('UPDATE mytable SET idnext = idnext + 1 returning idnext into ?');
my $idnext;
$sth->bind_param_inout(1, \$idnext, 8);
$sth->execute; # now $idnext should contain the value
Consulte DBI .