我理解的你的意思是这样的: t1中有四个字段,插入时a字段始终用最大值加1,b和c字段分别用t2的e和t3的f来填值,t2和t3记录数相等,都是从头到尾依次插入,t1的d字段用'1'来填充。如果是这样的话,你可以用下面的语句实现: insert into t1 select atable.maxa+btable.rn,btable.e,ctable.f,'1' from (select max(a) maxa from t1) atable,(select e,rownum rn from t2) btable,(select f,rownum rn from t3) ctable where btable.rn=ctable.rn;本机已通过调试,你自己再看看。
create or replace pro is cursor cur is select t2.e e,t3.f f from t2,t3; va t1.a%type; begin select max(a) into va from t1; va:=va+1; for currec in cur loop insert into t1 values (va,currec.e,currec.f,'1'); va:=va+1; end loop; end pro; 我不知道我 有没有实现你的目的.
cursor cur is select t2.e e,t3.f f from t2,t3; 这个方法不错,问题已经解决, 多谢各位啦,
select max(a) from t1仅仅返回的是一条数据,而(select e from t2),(select f from t3)都是返回多条。必须要保证(select max(a)+1 from t1),(select e from t2),(select f from t3)有一个字段进行关联,才不会出现笛卡尔积
insert into t1
select (select max(a)+1 from t1)a , e,f ,'1' from t2,t3
否则没有关系的瞎写sql,就算有效也是没有意义
建议楼主在使用数据库之前应先学习下关系数据库原理特别是E-R关系
理论基础要扎实才行
t1中有四个字段,插入时a字段始终用最大值加1,b和c字段分别用t2的e和t3的f来填值,t2和t3记录数相等,都是从头到尾依次插入,t1的d字段用'1'来填充。如果是这样的话,你可以用下面的语句实现:
insert into t1
select atable.maxa+btable.rn,btable.e,ctable.f,'1' from (select max(a) maxa from t1) atable,(select e,rownum rn from t2) btable,(select f,rownum rn from t3) ctable where btable.rn=ctable.rn;本机已通过调试,你自己再看看。
is
cursor cur is select t2.e e,t3.f f from t2,t3;
va t1.a%type;
begin
select max(a) into va from t1;
va:=va+1;
for currec in cur loop
insert into t1 values (va,currec.e,currec.f,'1');
va:=va+1;
end loop;
end pro;
我不知道我 有没有实现你的目的.
另外maohuijian(mao)的做法难道不是两个表的乘积么,呵呵
这个方法不错,问题已经解决,
多谢各位啦,