日期:2014-05-17  浏览次数:20741 次

Oracle序列 和 SQL SERVER 自增列的问题
现对一表进行如下操作,主键为ID
1.定义并启动一个事务
2.使用com智能指针打开表
_RecordsetPtr pRecPtr = m_pAdoDb->OpenTable(strSQL,adCmdText);//m_pAdoDb为数据库连接指针
3.添加记录
spRcdset->AddNew();
4.写入部分字段,然后Update
spRcdset->Update(vtMissing, vtMissing);

问题在于,如果上述操作使用SQL SERVER完成(ID为自增列),在第4步操作之后我可以用
_variant_t Value = spRcdset->GetCollect(L"ID");
来获取新插入的记录的ID
如果使用Oracle操作,在在第4步操作之后使用
_variant_t Value = spRcdset->GetCollect(L"ID");
却无法获得新插入的记录的ID。
请问这是问什么?

在获取到ID之后结束事务。

------解决方案--------------------
用oracle序列,nextval取下一值,currval当前值.

SQL> create sequence seq_01
2 increment by 1
3 start with 1;

序列已创建。

SQL> select seq_01.nextval from dual;

NEXTVAL
----------
1

SQL> select seq_01.currval from dual;

CURRVAL
----------
1

SQL> select seq_01.currval from dual;

CURRVAL
----------
1


------解决方案--------------------
补充一下:在同一对话中取得的currval是一样的,你可以再打开一个对话如下:
SQL> select seq_01.nextval from dual;

NEXTVAL
----------
2

SQL> select seq_01.currval from dual;

CURRVAL
----------
2

这时你在上面的对话中执行select seq_01.currval from dual;取到的值仍为1,所以没有问题.