Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL:Wie man ein Feld liest und erhöht

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 .