Oracle一次插入多条记录时,如何给定主键?

我要向表T(id,a,b,c)中一次插入多条子查询的记录,语句如下insertintoTselect(a,b,c)from("子查询获得的结果")现在的问题是,这条语句没... 我要向表T(id,a,b,c)中一次插入多条子查询的记录,语句如下
insert into T
select (a, b, c) from ("子查询获得的结果")
现在的问题是,这条语句没有给定T的id,T的id由Sequence s取得。
求高手解答!!!在线等!!万分感激!!
我只有5点财富了,实在抱歉!!
展开
 我来答
198901245631
2015-04-16 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1685万
展开全部
通过你的描述:
解决方案一:你可以设置一个sequence,然后这个sequence的主要作用就是每次插入的时候 id的字段值设置成next_val;这样就可以实现简单的主键。
解决方案二:你还可以设置id的形式为uuid(32个字节长度)。这个能保证每次的输入值唯一
BuddhaQQ
2012-12-29 · TA获得超过1762个赞
知道小有建树答主
回答量:860
采纳率:100%
帮助的人:969万
展开全部
给你思路:
查看下T主键ID的当前SEQUANCE值,或用select max(id) from T,得到当前序列号值为x
然后在子查询中用rownum+x方式
insert into T select (rownum+x,a,b,c) from ……
完成后重建或者空选下sequence避免后续调用时出现问题
更多追问追答
追问
你的思路非常棒,很有帮助!但是我只能写一条SQL语句,然后把语句交给DBA用Oracle的Job来定时执行,我估计DBA不会帮我每次都重建Sequence……泪奔!!!
还有别的办法么????
追答
定义job时完全可以执行或调用存储过程,和DBA交涉下
建议你按照思路写好代码做到存储过程,让DBA在JOB中执行你的存储过程
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lypch
2012-12-29
知道答主
回答量:29
采纳率:0%
帮助的人:15.1万
展开全部
这个恐怕不行的,如果真的没有指定的话,可以追加一个Trigger ,on inster Each Row方式。
写上 :new.id = s.nextval;

就可以了
追问
谢谢!但是DBA不会帮我加触发器的……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星辰大海byj
2012-12-29 · TA获得超过1020个赞
知道小有建树答主
回答量:993
采纳率:100%
帮助的人:523万
展开全部
insert into t (id,a,b,c) select s.nextval,a,b,c from ("子查询获得的结果");
更多追问追答
追问
谢谢!我已经试过了,这个方法不行……提示说“此处不能使用序列”……
追答
那就把你的那个子查询获得的结果的sql贴出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式