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点财富了,实在抱歉!! 展开
insert into T
select (a, b, c) from ("子查询获得的结果")
现在的问题是,这条语句没有给定T的id,T的id由Sequence s取得。
求高手解答!!!在线等!!万分感激!!
我只有5点财富了,实在抱歉!! 展开
4个回答
展开全部
给你思路:
查看下T主键ID的当前SEQUANCE值,或用select max(id) from T,得到当前序列号值为x
然后在子查询中用rownum+x方式
insert into T select (rownum+x,a,b,c) from ……
完成后重建或者空选下sequence避免后续调用时出现问题
查看下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中执行你的存储过程
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个恐怕不行的,如果真的没有指定的话,可以追加一个Trigger ,on inster Each Row方式。
写上 :new.id = s.nextval;
就可以了
写上 :new.id = s.nextval;
就可以了
追问
谢谢!但是DBA不会帮我加触发器的……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
insert into t (id,a,b,c) select s.nextval,a,b,c from ("子查询获得的结果");
更多追问追答
追问
谢谢!我已经试过了,这个方法不行……提示说“此处不能使用序列”……
追答
那就把你的那个子查询获得的结果的sql贴出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询