In diesem speziellen Fall ist eine Sequenz wie erwähnt die richtige Lösung. Aber wenn Sie in einer zukünftigen Situation sowohl etwas aktualisieren als auch einen Wert in derselben Anweisung zurückgeben müssen, können Sie RETURNING
verwenden Klausel:
UPDATE atable SET foo = do_something_with(foo) RETURNING foo INTO ?
Wenn der aufrufende Code PL/SQL ist, ersetzen Sie das ? mit einer lokalen PL/SQL-Variablen; andernfalls können Sie es als Ausgabeparameter in Ihr Programm binden.
Bearbeiten:Da Sie Perl erwähnt haben, sollte so etwas funktionieren (ungetestet):
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
Siehe DBI .