oracle将一个数据表的所有数据插入到另一个数据表??

desertstu 2010-10-13 09:19:26
我现在想实现的功能是:我在oracle中有两个表空间,这两个表空间有相同的表(表A,表B)
但是表B比表A多一个字段ID,我现在想把表A的所有数据都插入到表B,但是我要在程序中为ID动态的添加编号
ID起初赋值为1,然后递增。该怎么做呢???
...全文
721 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
水中影子 2010-10-17
  • 打赏
  • 举报
回复


[Quote=引用 10 楼 huangdh12 的回复:]

insert into b select a.*,rownum from a;
[/Quote]
+1
njlywy 2010-10-16
  • 打赏
  • 举报
回复
insert into b select * ,seq.nextval from a
l1t 2010-10-16
  • 打赏
  • 举报
回复
如果需要多次插入,怎么保证不会有重复的数据?
心中的彩虹 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wkc168 的回复:]
引用楼主 desertstu 的回复:
我现在想实现的功能是:我在oracle中有两个表空间,这两个表空间有相同的表(表A,表B)
但是表B比表A多一个字段ID,我现在想把表A的所有数据都插入到表B,但是我要在程序中为ID动态的添加编号
ID起初赋值为1,然后递增。该怎么做呢???


SQL code

--用序列
create sequence seqid
start w……
[/Quote]
不用序列 就用伪列
insert into b select a.*,rownum from A
心中的彩虹 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 desertstu 的回复:]
我现在想实现的功能是:我在oracle中有两个表空间,这两个表空间有相同的表(表A,表B)
但是表B比表A多一个字段ID,我现在想把表A的所有数据都插入到表B,但是我要在程序中为ID动态的添加编号
ID起初赋值为1,然后递增。该怎么做呢???
[/Quote]

--用序列
create sequence seqid
start with 1
increment by 1
cache 10

insert into b select a.*,seqid.nextval from A


huangdh12 2010-10-15
  • 打赏
  • 举报
回复
insert into b select a.*,rownum from a;
f220526 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 huangdh12 的回复:]
insert into b select a.*,rownum from a;
[/Quote]


经典~~~ 就用这个
xiaobei0623 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiaobei0623 的回复:]
create sequence B
minvalue 1
maxvalue 999999999999
increment by 1
CYCLE
cache 20;



CREATE OR REPLACE TRIGGER B_trig
before insert on B
for each row WHEN(new.ID IS NULL)
begin
select (……
[/Quote]
序列名字改一下,和表名重了。
xiaobei0623 2010-10-15
  • 打赏
  • 举报
回复
create sequence B
minvalue 1
maxvalue 999999999999
increment by 1
CYCLE
cache 20;



CREATE OR REPLACE TRIGGER B_trig
before insert on B
for each row WHEN(new.ID IS NULL)
begin
select (to_char(sysdate,'yyyymmdd'))||trim(to_char(B.nextval,'000000000000')) INTO:NEW.ID from dual;
end B_trig;

INSERT INTO 库表C.B(SELECT 库表D.A.*)
gelyon 2010-10-13
  • 打赏
  • 举报
回复

CREATE TABLE t_a(id number,col1 number,col2 number);
CREATE TABLE t_b(col1 number,col2 number);

INSERT INTO t_b VALUES(1,1);
INSERT INTO t_b VALUES(2,2);
COMMIT;
INSERT INTO t_a SELECT ROWNUM,t_b.* FROM t_b;
SELECT * FROM t_a;
minitoy 2010-10-13
  • 打赏
  • 举报
回复
insert into b select a.*,rownum from a;
melas 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 desertstu 的回复:]
引用 4 楼 hao1hao2hao3 的回复:
引用 3 楼 desertstu 的回复:
引用 1 楼 caofaping 的回复:
SQL code

insert into b select a.*,sequence.nextval from a;


怎么为ID添加values???这个不对吧


1楼说的没错,先新建一个sequence,假设为seq,起始值设为1……
[/Quote]

那你就写个存储过程来做好了
每次新建sequence,清空表B,再插入
插入完了就删掉那个sequence
desertstu 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hao1hao2hao3 的回复:]
引用 3 楼 desertstu 的回复:
引用 1 楼 caofaping 的回复:
SQL code

insert into b select a.*,sequence.nextval from a;


怎么为ID添加values???这个不对吧


1楼说的没错,先新建一个sequence,假设为seq,起始值设为1,增量设为1,设置一个最大值,然后就可以通过上面的代……
[/Quote]

表B比表A多了一个ID字段哎,这怎么搞的?还有我是每隔一段时间要把表B清空,重复进行插入操作,而且每次我都要让ID从1开始...,这么做可以吗??
hao1hao2hao3 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 desertstu 的回复:]
引用 1 楼 caofaping 的回复:
SQL code

insert into b select a.*,sequence.nextval from a;


怎么为ID添加values???这个不对吧
[/Quote]

1楼说的没错,先新建一个sequence,假设为seq,起始值设为1,增量设为1,设置一个最大值,然后就可以通过上面的代码来处理了。


insert into b select * ,seq.nextval from a
desertstu 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caofaping 的回复:]
SQL code

insert into b select a.*,sequence.nextval from a;
[/Quote]

怎么为ID添加values???这个不对吧
caofaping 2010-10-13
  • 打赏
  • 举报
回复

insert into b select a.*,sequence.nextval from a;
sinpoal 2010-10-13
  • 打赏
  • 举报
回复
按楼上的总结:
--建立sequence
create sequence seq
increment by 1
start with 1
nocycle

insert into B select a.* seq.nextval from a

17,086

社区成员

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

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