--PL/SQL循环控制语句 之 IF ... THEN ...
create or replace procedure RecoverRecord is
--定义游标类型myCursor;
type myCursor is ref cursor;
--定义游标类型的变量mycur1;
mycur1 myCursor;
--定义一般变量;
v_name emp.ename%type;
v_sal emp.sal%type;
--执行部分;
begin
--把游标mycur1与一个select结合;
open mycur1 for select ename,sal from emp where deptno=&no;
--循环取出数据;
loop
fetch mycur1 into v_name,v_sal;
--判断该员工的工资是否小于2500;小于2500的工资都加100;
if v_sal<2500 then
update emp set sal=sal+100 where ename=v_name;
dbms_output.put_line('员工姓名:'||v_name||' 工资:'||v_sal||' 由于该员工的工资低于2500,现在再加100,其工资为'||(v_sal+100));
else
dbms_output.put_line('员工姓名:'||v_name||' 工资:'||v_sal);
end if;
--判断游标mucur1是否为空;
exit when mycur1%notfound;
end loop;
--关闭游标;
close mycur1;
end;
-- 测试loop循环与while循环的区别;
create or replace procedure testLoop is
v_num number:=1;
begin
loop
v_num:=v_num+1; --loop循环内的语句有执行顺序;
exit when v_num>0; --若先写Exit语句,则先判断,否则先做Exit语句之前的语句,后判断;
end loop;
dbms_output.put_line(v_num);
end;
--测试调用有返回值的过程;
--参数中的 in 表示该参数是一个输入值参数;
--参数中的 out 表示该参数是一个输出值参数;
create or replace procedure getName(pnum in number,pname out varchar2,psal out number)
is
begin
select ename,sal into pname,psal from emp where empno=pnum;
end;
--返回结果集的过程;
--1.创建一个包,在该包中定义一个游标类型;
create or replace package mypackage as
type returncursor is ref cursor;
end mypackage;
--2.创建过程,要求返回有表类型;
create or replace procedure mycur(pnum number,pcursor out mypackage.returncursor)
is
begin
open pcursor for select * from emp where deptno=pnum;
end;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24465008/viewspace-692328/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24465008/viewspace-692328/