В този конкретен случай последователността е правилното решение, както беше споменато. Но ако в някоя бъдеща ситуация трябва както да актуализирате нещо, така и да върнете стойност в същия оператор, можете да използвате RETURNING
клауза:
UPDATE atable SET foo = do_something_with(foo) RETURNING foo INTO ?
Ако извикващият код е PL/SQL, заменете ? с локална PL/SQL променлива; в противен случай можете да го обвържете като изходен параметър във вашата програма.
Редактиране:Тъй като споменахте Perl, нещо подобно трябва да работи (нетествано):
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
Вижте DBI .