plsql儲存過程及函式
阿新 • • 發佈:2020-12-09
儲存過程及函式
儲存過程
--儲存過程 是先編譯 後執行的一種程式碼集合物件 -- 基本儲存過程 create or replace procedure hello_pro as begin dbms_output.put_line('HEllo,儲存過程,準備開始!'); end; --執行儲存過程 begin hello_pro; end; --帶參儲存過程 --查詢出20號部門的所有員工資訊 create or replace procedure emp_dno_pro(vdeptno number) as cursor emp_cur is select from emp where deptno = vdeptno; -- 建立遊標 vemp emp%rowtype; begin open emp_cur; --開啟遊標 loop --do while迴圈 fetch emp_cur into vemp; exit when emp_cur%notfound; --退出條件 dbms_output.put_line('員工編號:'||vemp.empno||'員工名:'||vemo.ename); end loop; close emp_cur; end emp_dno_pro; --呼叫 begin emp_dno_pro; end;
引數的三種傳輸型別
--查詢出7499號員工工資 create or replace procedure emp_sal_pro(vempno number,vsal out number) as begin select sal into vsal from emp where empno = vempno; end emp_sal_pro; declare vsal emp.sal%type; begin --vsal是一個傳出引數,所以需要一個變數接收 emp_sal_pro(7499,vsal); dbms_output.put_line('7499號員工工資為:'||vsal); end; --查詢出30號部門的所有員工資訊 create or replace procedure emp_dno_pro(vdeptno number,cemp_cur out sys_refcursor) as begin open cemp_cur for select * from emp where deptno = vdeptno; end; declare vemp_cur sys_refcursor; vemp emp%rowtype; begin emp_dno_pro(30,vemp_cur); loop fetch vemp_cur into vemp; exit when vemp_cur%notfound; dbms_output.put_line('員工編號:'||vemp.empno||'姓名為:'||vemp.ename); end loop; close vemp_cur; end;
儲存函式
create or replace function hello_fun return varchar2 as vstr varchar2(50); begin return 'Hello 儲存函式'; end; -- 呼叫 declare vstr varchar(100); begin vstr:=hello_fun; dbms_output.put_line(vstr); end; -- 查詢出7499號員工姓名工資 create or replace function emp_empno_fun(vempno number,vname out varchar2) return number as vsal emp.sal%type; begin select ename,sal into vname,vsal from emp where empno = vempno; return vsal; end; --呼叫儲存函式 declare vname emp.ename%type; vsal emp.sal%type; begin vsal := emp_empno_fun(7499,vname); dbms_output.put_line('7499號員工姓名為:'||vname||'工資為:'||vsal); end; --查詢出30號部門的所有員工資訊,及人數 create or replace function emp_dno_fun(vdeptno number,vemp_cur out sys_refcursor) return number as vcount number(5); begin open vemp_cur for select * from emp where deptno = vdeptno; select count(empno) into vcount from emp where deptno = vdeptno; return vcount; end; declare vemp_cur sys_refcursor; vcount number(5); vemp emp%rowtype; begin vcount:=emp_dno_fun(30,vemp_cur); loop fetch vemp_cur into vemp; exit when vemp_cur%notfound; dbms_output.put_line('員工編號:'||vemp.empno||'姓名為:'||vemp.ename); end loop; dbms_output.put_line('30號部門人數為:'||vcount); close vemp_cur; end;