I just detta fall är en sekvens den rätta lösningen som nämnts. Men om du i någon framtida situation behöver både uppdatera något och returnera ett värde i samma uttalande, kan du använda RETURNING
klausul:
UPDATE atable SET foo = do_something_with(foo) RETURNING foo INTO ?
Om anropskoden är PL/SQL, byt ut ? med en lokal PL/SQL-variabel; annars kan du binda den som en utdataparameter i ditt program.
Edit:Eftersom du nämnde Perl borde något sådant här fungera (otestat):
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
Se DBI .