是这样的:
在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 子句 ”
请大家帮忙,谢谢了。

解决方案 »

  1.   

    2.应该是需要定义个变量用来接收 seq_biao.currval的值
      

  2.   

    在sql server中这样就行了:
    insert into 表 (filed1,filed2,filed3)values(:filed1,:filed2,:filed3); select @@IDENTITY
    在oracle中相应的该怎么样啊?
      

  3.   

    oracle中定义一个变量tempselect seq_biao.currval into temp from dual你试试
      

  4.   

    "insert into 表 (filed1,filed2,filed3)values(:filed1,:filed2,:filed3);select seq_biao.currval from dual;" 你上面这样,就算可以执行,在并发的情况下,currval也已经可能不是刚才插入的语句的当前值了
      

  5.   

    在oracle中,你的程序中如果要用到当前插入数据的的序列号的 currval值,那么,你在插入前就把值从数据库的序列中通过 nextVal 取出来,组织到你的SQL语句中,再插入数据,这样,你所要有值也就有了
      

  6.   

    majy:请问:为什么不是当前值呢?在和insert语句一起的情况下,不是会锁住数据库么?
      

  7.   

    csuxp2008:
    如果弄到一个临时变量中,怎么从这个临时变量中取出来啊?我想把这个值取出来啊关键是.
    =====================
    多谢上面两位解答.
      

  8.   

    majy真速度阿...
    那你的意思是:
    "select seq_biao.currval from dual;"
    "insert into 表 (id,filed1,filed2,filed3)values(上句取出的值,:filed1,:filed2,:filed3);" ????
    那这样的话,那个触发器还用不用啊?
      

  9.   

    csuxp2008说的临时变量那是在 sqlplus中操作的时候才可能的,你现在是通过程序,这是做不到的
      

  10.   

    取一个sequence的值根本上不用触发器的这个东西,另外,触发器不是什么好东西,能不用就不要用
      

  11.   

    那majy(天太黑) 按照你的意思来说就是这样是吧?
    先把触发器去掉,然后在插入的时候,先取出currval,然后将这个currval值作为id去做普通的插入,对吗?
    那我写sql语句的时候,也就没有必要将两条语句写成一条了吧?
    就可以先取出这个currval,在程序中存为一个变量,再根据这个变量去组织sql语句?对吗?