免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 屠龙
打印 上一主题 下一主题

如何准确无误地取到刚刚插入的一行? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-04-07 10:35 |只看该作者

如何准确无误地取到刚刚插入的一行?

谢谢各位大侠相助!

论坛徽章:
0
12 [报告]
发表于 2006-12-05 00:00 |只看该作者
  1. 4.15.2) 我如何获得一个插入的序列号的值?
  2. 一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL 值,然后再显式插入。使用 4.15.1 里的例表,可用伪码这样描述:

  3.     new_id = execute("SELECT nextval('person_id_seq')");
  4.     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");

  5. 这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为 person 表的外键)。注意自动创建的 SEQUENCE 对象的名称将会是 <table>_<serialcolumn>_seq,这里 table 和 serialcolumn 分别是你的表的名称和你的 SERIAL 字段的名称。

  6. 类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的 SERIAL 值,例如,

  7.     execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
  8.     new_id = execute("SELECT currval('person_id_seq')");

  9. 最后,你可以使用从 INSERT 语句返回的 OID 查找缺省值,尽管这可能是最缺乏移植性的方法。在 Perl 里,使用带有 Edmund Mergl 的 DBD::Pg 模块的 DBI,oid 值可以通过 $sth->execute() 后的 $sth->{pg_oid_status} 获得。
复制代码

正好遇到这问题,原出处是中文postgre的FAQ。

http://www.pgsqldb.org/postgres-faq.html

论坛徽章:
0
13 [报告]
发表于 2007-04-23 16:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
14 [报告]
发表于 2007-04-24 13:45 |只看该作者
currval('序列名')

lastval()   -- 不用任何参数,最后一次的任何序列的自增值

论坛徽章:
0
15 [报告]
发表于 2007-05-08 15:40 |只看该作者

使用RETURNING

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
   RETURNING did;

论坛徽章:
0
16 [报告]
发表于 2007-05-08 17:10 |只看该作者
这篇应当加精!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP