create procedure pro
as
cursor t_sor is
select b.职工编号,(select 基本工资 from zc0000 a where a.职称编号=b.职称编号) 基本工资 from emp000 b;
begin
for v_sor in t_sor loop
update grgzxx set 基本工资=v_sor.基本工资 where 职工编号=v_sor.职工编号;
if sql%rowcount=0 then
insert into grgzxx values (sysdate,v_sor.职工编号,v_sor.基本工资);
end if;
end loop;
end;
/
as
cursor t_sor is
select b.职工编号,(select 基本工资 from zc0000 a where a.职称编号=b.职称编号) 基本工资 from emp000 b;
begin
for v_sor in t_sor loop
update grgzxx set 基本工资=v_sor.基本工资 where 职工编号=v_sor.职工编号;
if sql%rowcount=0 then
insert into grgzxx values (sysdate,v_sor.职工编号,v_sor.基本工资);
end if;
end loop;
end;
/
首先选出职工信息在个人工资信息表中不存在的记录,将个人信息和工资插入到个人工资信息表中。
然后再更新出工信息已经存在于个人工资信息表演中的基本工资就行了,至于查询你自己优化吧,我为了方便使用了子查询。create or replace procedure simpleProcedure is
cursor v_emp_exists is select emp000.Ö°¹¤±àºÅ,emp000.Ö°Îñ±àºÅ,zc0000.»ù±¾¹¤×Ê
from emp000,zc0000
where emp000.Ö°¹¤±àºÅ not in(select Ö°¹¤±àºÅ from grgzxx);
cursor v_emp_notExists is select emp000.Ö°¹¤±àºÅ,emp000.Ö°Îñ±àºÅ,zc0000.»ù±¾¹¤×Ê
from emp000,zc0000
where emp000.Ö°¹¤±àºÅ in(select Ö°¹¤±àºÅ from grgzxx);
begin
open v_emp_exists;
--²åÈëÐÂÔöÔ±¹¤µÄ¹¤×Ê
loop
fetch v_emp_exists into v_emp;
exit when v_emp_exists%notfound;
insert into grgzxx(µÇ¼ÇÄêÔÂ,Ö°¹¤±àºÅ,»ù±¾¹¤×Ê) values(sysdate,v_emp.Ö°¹¤±àºÅ,v_emp.»ù±¾¹¤×Ê);
end loop;
close v_emp_exists;
open v_emp_notExists;
--¸üÐÂÔ­À´Ô±¹¤µÄ¹¤×Ê
loop
fetch v_emp_notExists into v_emp;
exit when v_emp_notExists%notfound;
update grgzxx set »ù±¾¹¤×Ê= v_emp.»ù±¾¹¤×Ê where Ö°¹¤±àºÅ= v_emp.Ö°¹¤±àºÅ;
end loop;
close v_emp_notExists;
end simpleProcedure;
cursor v_emp_exists is select emp000.职工编号,emp000.职务编号,zc0000.基本工资
from emp000,zc0000
where emp000.职工编号 not in(select 职工编号 from grgzxx);
cursor v_emp_notExists is select emp000.职工编号,emp000.职务编号,zc0000.基本工资
from emp000,zc0000
where emp000.职工编号 in(select 职工编号 from grgzxx);
begin
open v_emp_exists;
--插入新增员工的工资
loop
fetch v_emp_exists into v_emp;
exit when v_emp_exists%notfound;
insert into grgzxx(登记年月,职工编号,基本工资) values(sysdate,v_emp.职工编号,v_emp.基本工资);
end loop;
close v_emp_exists;
open v_emp_notExists;
--更新原来员工的工资
loop
fetch v_emp_notExists into v_emp;
exit when v_emp_notExists%notfound;
update grgzxx set 基本工资= v_emp.基本工资 where 职工编号= v_emp.职工编号;
end loop;
close v_emp_notExists;
commit;
end simpleProcedure;
/
唉,又笨了,你用:beckhambobo(beckham) 的那个就可以了。
用 %rowcount 可以得到最近操作影响的行,我居然不知道用上。 算了,不要分了。
V_sor在该存贮过程中并没有定义
帮忙解释一下
警告: 创建的过程带有编译错误。
cursor t_sor is
select b.职工编号,a.基本工资 from zc0000 a,emp000 b where a.职称编号=b.职称编号;
改过之后仍出去相同的告警提示
select b.职工编号,(select 基本工资 from zc0000 a where a.职称编号=b.职称编号) 基本工资 from emp000 b;可以写成:
cursor t_sor is
select b.职工编号,a.基本工资 from emp000 b,zc0000 a where a.职称编号=b.职称编号;试试看吧。
自己也要先去try一下嘛
这样才会有锻炼嘛