-- 装载数据
fetch cur_1 into empno, ename,job,mgr,hiredate,sal,comm,deptno;
1、里面into之后的那些变量你没有定义,你得定义变量,然后将游标中的东西fetch给这些变量。2、个人认为你开始判断游标是否已打开完全没有必要,如果异常,你在exception里close就行了。
3、你OPEN之后没有游标exit的条件
create or replace procedure pro_insert2
(i_value in number)
is
begin
for Crow in(select empno, ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno=i_value) loop
insert into emp_new(empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUES(Crow.empno,Crow.ename,Crow.job,Crow.mgr,Crow.hiredate,Crow.sal,comm,Crow.deptno);
end loop;
commit;
end;
end pro_insert2;
create or replace procedure pro_insert2
(i_value in number)
is
cursor cur_1
is
select *
from emp
where deptno=i_value;
emp_row cur_1%rowtype;
begin
--如果游标处于关闭状态
if cur_1%isopen = false
then
--打开游标
open cur_1;
-- 装载数据
fetch cur_1 into emp_row; --empno, ename,job,mgr,hiredate,sal,comm,deptno;
--如果记录存在,则循环插入数据
while cur_1%found
loop
insert into emp_new
VALUES(emp_row.empno,emp_row.ename,emp_row.job,mgr,emp_row.hiredate,emp_row.sal,emp_row.comm,emp_row.deptno);
fetch cur_1 into emp_row; --empno, ename, job, mgr, hiredate, sal, comm, deptno;
end loop;
--关闭游标
close cur_1;
--提交更新结果
commit;
end if;
--异常处理
exception
when others
then
rollback;
end pro_insert2;