关于得到刚插入的数据的问题.

zhuanshen712 2009-07-30 04:44:48
是这样的:
在oracle中,在刚插入一条数据后,想得到刚插入的数据的id,这个id是通过触发器做成的类似自增长列的.
这样:
"insert into 表 (filed1,filed2,filed3)values(:filed1,:filed2,:filed3);select seq_biao.currval from dual;"
其中表有一个字段是id,触发器类似如下:
create or replace trigger TR_表
before insert on 表
for each row
begin
Select seq_表.NextVal into :New.id from Dual;
end;
seq_表也有。
但是执行的时候出了两个错误:
1:好像一行不能执行两条语句,但是在程序中(asp.net)写,怎么换行啊?
2:提示“在此 SELECT 语句中缺少 INTO 子句 ”
请大家帮忙,谢谢了。
...全文
123 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuanshen712 2009-07-31
  • 打赏
  • 举报
回复
谢谢了.
majy 2009-07-31
  • 打赏
  • 举报
回复
Bingo, that's true
zhuanshen712 2009-07-31
  • 打赏
  • 举报
回复
那majy(天太黑) 按照你的意思来说就是这样是吧?
先把触发器去掉,然后在插入的时候,先取出currval,然后将这个currval值作为id去做普通的插入,对吗?
那我写sql语句的时候,也就没有必要将两条语句写成一条了吧?
就可以先取出这个currval,在程序中存为一个变量,再根据这个变量去组织sql语句?对吗?
majy 2009-07-31
  • 打赏
  • 举报
回复
取一个sequence的值根本上不用触发器的这个东西,另外,触发器不是什么好东西,能不用就不要用
majy 2009-07-31
  • 打赏
  • 举报
回复
csuxp2008说的临时变量那是在 sqlplus中操作的时候才可能的,你现在是通过程序,这是做不到的
zhuanshen712 2009-07-31
  • 打赏
  • 举报
回复
majy真速度阿...
那你的意思是:
"select seq_biao.currval from dual;"
"insert into 表 (id,filed1,filed2,filed3)values(上句取出的值,:filed1,:filed2,:filed3);" ????
那这样的话,那个触发器还用不用啊?
zhuanshen712 2009-07-31
  • 打赏
  • 举报
回复
csuxp2008:
如果弄到一个临时变量中,怎么从这个临时变量中取出来啊?我想把这个值取出来啊关键是.
=====================
多谢上面两位解答.
majy 2009-07-31
  • 打赏
  • 举报
回复
不会锁的,只会锁住当前插入的数据记录,跟其他数据无关的
zhuanshen712 2009-07-31
  • 打赏
  • 举报
回复
majy:请问:为什么不是当前值呢?在和insert语句一起的情况下,不是会锁住数据库么?
majy 2009-07-30
  • 打赏
  • 举报
回复
在oracle中,你的程序中如果要用到当前插入数据的的序列号的 currval值,那么,你在插入前就把值从数据库的序列中通过 nextVal 取出来,组织到你的SQL语句中,再插入数据,这样,你所要有值也就有了
majy 2009-07-30
  • 打赏
  • 举报
回复
"insert into 表 (filed1,filed2,filed3)values(:filed1,:filed2,:filed3);select seq_biao.currval from dual;"

你上面这样,就算可以执行,在并发的情况下,currval也已经可能不是刚才插入的语句的当前值了

csuxp2008 2009-07-30
  • 打赏
  • 举报
回复
oracle中定义一个变量temp

select seq_biao.currval into temp from dual

你试试
zhuanshen712 2009-07-30
  • 打赏
  • 举报
回复
在sql server中这样就行了:
insert into 表 (filed1,filed2,filed3)values(:filed1,:filed2,:filed3); select @@IDENTITY
在oracle中相应的该怎么样啊?
csuxp2008 2009-07-30
  • 打赏
  • 举报
回复
2.应该是需要定义个变量用来接收 seq_biao.currval的值

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧