W tym konkretnym przypadku sekwencja jest właściwym rozwiązaniem, jak wspomniano. Ale jeśli w przyszłości będziesz musiał coś zaktualizować i zwrócić wartość w tej samej instrukcji, możesz użyć RETURNING
klauzula:
UPDATE atable SET foo = do_something_with(foo) RETURNING foo INTO ?
Jeśli kod wywołujący to PL/SQL, zastąp znak ? z lokalną zmienną PL/SQL; w przeciwnym razie możesz powiązać go jako parametr wyjściowy w swoim programie.
Edycja:Skoro wspomniałeś o Perlu, coś takiego powinno działać (niesprawdzone):
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
Zobacz DBI .