加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle SQL:如何读取和增加字段

发布时间:2020-12-12 13:09:31 所属栏目:百科 来源:网络整理
导读:我正在重构企业应用程序的数据导入过程,并遇到了一个片段,我想找到一个更好的解决方案.导入数据时,我们必须为每个数据集创建一个唯一的实体,并且字段中有一个计数器用于按顺序分配此ID.您阅读该字段以获取下一个空闲ID并在之后增加它以准备下一次. 目前,这是
我正在重构企业应用程序的数据导入过程,并遇到了一个片段,我想找到一个更好的解决方案.导入数据时,我们必须为每个数据集创建一个唯一的实体,并且字段中有一个计数器用于按顺序分配此ID.您阅读该字段以获取下一个空闲ID并在之后增加它以准备下一次.

目前,这是在原始应用程序中分两步完成的,用’C’编写:

SELECT idnext FROM mytable;
   UPDATE mytable SET idnext = idnext + 1;

显然,如果多个进程执行相同的操作,则存在竞争条件.

编辑:重要的核心:我无法触及数据库/字段定义,这排除了一个序列.

我们在perl中重写,我想做同样的事情,但更好.原子解决方案会很好.不幸的是我的SQL技能有限,所以我转向集体智慧:-)

在这种特殊情况下,序列是正确的解决方案.但是,如果在将来某种情况下您需要更新某些内容并在同一语句中返回值,则可以使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读