ITPUB论坛 » Oracle开发 » 能实现吗??用一个sql返回插入的序列值
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-7-3 14:50 凌西
能实现吗??用一个sql返回插入的序列值

现有一个表主键是序列生成的,现在想每次插入一条数据时同时返回该序列的值,请问用一个sql语句能实现吗????
类似于存储过程中使用的returning的功能


如 : insert into  tableq  values (bb.nextval,aa,a,a)   returning ????


各位大侠,如上需求可以实现吗?小妹先谢谢各位了

2008-7-3 15:01 nyfor
declare
  ln number;
begin
  insert into  tableq(id)  values (bb.nextval) returning id into ln;
end;

2008-7-3 15:04 凌西
如果不放在变量中直接返回有办法吗?    像select 那样来返回结果,
因为程序中无法使用sql块!!


谢谢

2008-7-3 15:05 zhangfengh
returning 直接就返回给变量

2008-7-3 15:06 zhangfengh
那就2个sql
insert into  tableq  values (bb.nextval,aa,a,a)  
select bb.currval from dual
连着使用

2008-7-3 15:07 bell6248
[quote]原帖由 [i]凌西[/i] 于 2008-7-3 15:04 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10842668&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]
如果不放在变量中直接返回有办法吗?    像select 那样来返回结果,
因为程序中无法使用sql块!!


谢谢 [/quote]


"因为程序中无法使用sql块!!", 你的意思是不容许使用PL/SQL, 如果是这样, 那你还要写一句sql, 一句sql无法实现!

2008-7-3 15:15 凌西
一个sql语句真的无法实现了吗??
两个sql实现的话在程序中需要多做很多工作...
真的很感谢各位的帮忙...

2008-7-3 15:16 jvkojvko
学习了,这些都没有用到过呢

2008-7-3 15:23 nyfor
LZ 想把 INSERT 语句当成 SELECT 语句来使用, 有点意思 :)

告诉你, 这不可能.

如果你是在应用程序中执行这样的SQL语句, 那么绑定变量应该会使用到吧, 只需要绑定一个输出的变量就可以利用 returning 子句返回到应用程序的绑定变量中.

2008-7-3 15:31 凌西
谢谢LS,没有别的办法就只能用2个sql了
呵呵,不过让我确定没有其他办法也是很有收获了,嘿嘿



捡到了56 pub 币,哈哈

2008-7-3 15:56 nyfor
不可想象, LZ似乎没有在应用程序中使用过绑定变量. ;)

2008-7-3 17:04 caizhuoyi
直接在刚插入的表中取就可以了。

2008-7-4 09:19 凌西
[quote]原帖由 [i]nyfor[/i] 于 2008-7-3 15:56 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10843325&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]
不可想象, LZ似乎没有在应用程序中使用过绑定变量. ;) [/quote]


这个要看项目的啊,有的可以用,有的就不可以啊,呵呵,就象存储过程,有的项目也是不可以用的啊

2008-7-4 09:21 zhangfengh
[quote]原帖由 [i]凌西[/i] 于 2008-7-4 09:19 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10850000&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]



这个要看项目的啊,有的可以用,有的就不可以啊,呵呵,就象存储过程,有的项目也是不可以用的啊 [/quote]

说说看什么样的项目不让用 存储过程呗,让我也开开眼:)

2008-7-4 09:28 nyfor
[quote]原帖由 [i]凌西[/i] 于 2008-7-4 09:19 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10850000&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]
这个要看项目的啊,有的可以用,有的就不可以啊,呵呵,就象存储过程,有的项目也是不可以用的啊 [/quote]
使用存储过程一样有参数传递啊, 难道你们存储过程的调用参数部分都采用硬编码的方式而不使用绑定变量吗?
不使用绑定变量容易遭受一些注入攻击哦 :) 当然程序中做些处理判断还是可以预防攻击的.

2008-7-4 09:58 feng2371
[quote]原帖由 [i]caizhuoyi[/i] 于 2008-7-3 17:04 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10844414&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]
直接在刚插入的表中取就可以了。 [/quote]
呵呵 ,这个有点意思

2008-7-4 10:12 DragonBill
[quote]原帖由 [i]zhangfengh[/i] 于 2008-7-4 09:21 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10850043&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]


说说看什么样的项目不让用 存储过程呗,让我也开开眼:) [/quote]


狐狸兄, 少见了吧:)
我因为工作关系, 曾接触过一个类似的客户, 碰巧见识了不让在项目中用SP的例子:)
理由嘛:因为其香港老大说SP难以管理, 所以不让用...

2008-7-4 10:29 DragonBill
INSERT...RETURNING功能好像只有PostgreSQL才实现了
Oracle只支持UPDATE...RETURNING/DELETE...RETURNING

2008-7-4 10:30 nyfor
[quote]原帖由 [i]DragonBill[/i] 于 2008-7-4 10:29 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10851295&ptid=1016040][img]http://www.itpub.net/images/common/back.gif[/img][/url]
INSERT...RETURNING功能好像只有PostgreSQL才实现了
Oracle只支持UPDATE...RETURNING/DELETE...RETURNING [/quote]
Oracle 同样支持.

2008-7-4 10:35 DragonBill
充其量也就只能这样:

SQL> create table abc(aa number)
  2  /

表已创建。

SQL> variable x number
SQL> insert into abc values(100) returning aa into :x;

已创建 1 行。

SQL> print x;

         X
----------
       100

页: [1] 2 3


Powered by ITPUB论坛