En este caso particular, una secuencia es la solución correcta como se mencionó. Pero si en alguna situación futura necesita actualizar algo y devolver un valor en la misma declaración, puede usar RETURNING
cláusula:
UPDATE atable SET foo = do_something_with(foo) RETURNING foo INTO ?
Si el código de llamada es PL/SQL, reemplace el ? con una variable PL/SQL local; de lo contrario, puede enlazarlo como un parámetro de salida en su programa.
Editar:como mencionaste Perl, algo como esto debería funcionar (no probado):
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 .