51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> oracle >> 文章正文

Oracle序列 和 SQL SERVER 自增列的问题

更新时间:2012-4-5:  来源:51代码网

现对一表进行如下操作,主键为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 没有自增的序列。
办法有2个:
  1.自己取得oracle序列的下一值.
  2.触发器
仔细看了描述:既然已经提交数据库了,并且程序没有报错(因为id是主键),表明数据已经存入数据库.认为有必要检查一下程序,或者查看数据库是否真的有你提交的数据.(不懂"使用com智能指针打开表")
 
oracle没有自增列的概念,你addnew的时候,并没有指定id的值,所以你get的时候,也就取不到值了
CREATE OR REPLACE TRIGGER TESTTRIGGER
  BEFORE INSERT ON TEST FOR EACH ROW
when (NEW.ID IS NULL)
BEGIN
SELECT SEQ_TEST_ID.NEXTVAL INTO :NEW.ID FROM DUAL;
END;

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |