例如A表有以下数据
ID STATE VALUE
2 OK 100
4 OK 200
7 INVALID 300
....B表有以下数据
ID A.ID COMMENT
1 1 EXAMPLE1
2 3 EXAMPLE2现在想把这些记录插入B
3 2 EXAMPLE3
4 4 EXAMPLE4
ID STATE VALUE
2 OK 100
4 OK 200
7 INVALID 300
....B表有以下数据
ID A.ID COMMENT
1 1 EXAMPLE1
2 3 EXAMPLE2现在想把这些记录插入B
3 2 EXAMPLE3
4 4 EXAMPLE4
解决方案 »
- 新手请教:oracle中怎么把数字转换成汉字?
- 使用oracle数据库的过程中发现日志过大
- 谁有quest central或者是sql navigator的中文使用手册或帮助?
- 2个星了,散分,发点东西大家探讨下, 写好SQL(2)
- 请问,当我写了个备分脚本,需要保存在哪个位置,才能被调用
- 建立视图的问题
- oracle客户端连接问题(在线等待,马上节分)
- orcale 查询速度,以及数据库的设计问题
- 一个数据备份的实际问题。
- 安装Oracle011g(64位)提示[INS-20802] Oracle Net Configuration Assistant 失败
- 请教一个sql语句
- 求一sql语句
num number;
begin
select max(to_number(id)) into num from b;
insert into b(ID, A.ID, COMMENT)
select num+rownum, ID, VALUE from a
where STATE='OK';
end;
另外A表的value和B表的comment不搭界的,B表只引用A表的ID,其余是另外赋值的
IDnum number;
begin
select max(ID) into IDnum from B;
insert into B(ID, A.ID, COMMENT)
select IDnum+rownum, ID, 'EXAMPLE'||(IDnum+rownum) from A
where STATE='OK';
end;
a_id a.id%type;
cursor cur_a_id is
select id from a where STATE='OK';
begin
open cur_a_id;
loop
fetch cur_id into a_id;
EXIT WHEN CUR_A_ID%NOTFOUND;
insert into b values (se_b_id.nextval(),a_id,comment);
end loop;
close cur_a_id;
end;如果你没有序列只好用(select max(id)+1 from b)来代替se_b_id.nextval()了,执行效率大打折扣。
另外,过程名一定要全部大写!否则备份的时候你会很意外。
B表的ID是不能相同的,所以还是有点问题。谢谢大家!希望大家继续帮我出出主意!
CREATE OR REPLACE procedure atob as
iflag number(8);
cursor cur_a_id is
select a_id from a where STATE='OK';
begin
select max(b_id) into iflag from b;
for data in cur_a_id loop
iflag:=iflag+1;
EXIT WHEN CUR_A_ID%NOTFOUND;
insert into b values (iflag,data.a_id,'comment');
end loop;
end;
/我不知道为什么yabbijan(new JavaDeveloper();)的方法不行,请大家讨论讨论,我下午结贴。
谢谢!
CREATE OR REPLACE PROCEDURE ATOB AS
IFLAG NUMBER(8);
CURSOR CUR_A_ID IS
SELECT A_ID FROM A WHERE STATE='OK';
BEGIN
SELECT MAX(B_ID) INTO IFLAG FROM B;
FOR DATA IN CUR_A_ID LOOP
IFLAG:=IFLAG+1;
EXIT WHEN CUR_A_ID%NOTFOUND;
INSERT INTO B VALUES (IFLAG,DATA.A_ID,'COMMENT');
END LOOP;
END;
/