PL/SQL迴圈控制語句

紅葉DBA發表於2011-04-12

--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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章