存儲過程/存儲函數


區別:存儲過程沒有返回值,  存儲函數有返回值(他們都可以通過out參數輸出返回值,所以這句話到后邊就不太對了)

存儲過程和存儲函數現在已經是一回事了,只是老版本的數據庫里兩者有區分,為了兼容老版本所以還分開稱呼

一,存儲過程

 1,打印Hello World:沒有參數的存儲過程,名字后不帶()

create or replace procedure sayhello as
begin
  dbms_output.put_line('Hello!');
end;

2,帶參數的存儲過程,不commit事物,水調用誰commit (in:輸入參數,out 輸出參數)

create or replace procedure raiseSalary(eno in number)
as
  --變量
  psal emp2.sal%type;
begin
  --得到漲薪前的工資
  select sal into psal from emp2 where empno=eno;

  --漲工資
  update emp2 set sal=sal+100 where empno=eno;

  --此處不用commit ,誰調用誰commit

  --打印
  dbms_output.put_line('漲工資前薪水:'||psal||',漲工資后薪水:'||(psal+100));

end;

調用時候提交事物 commit

二、存儲函數

例子一:查詢某個員工的年薪

create or replace function queryEmpImcome(eno in number)
return number
as

  --變量
  psal emp.sal%type;
  pcomm emp.comm%type;
begin
  select sal,comm into psal,pcomm from emp where empno=eno;
  return (psal+nvl(pcomm,0))*12;

end;

過程和函數中的in 、out 參數

所以現在意義上,過程和函數就是一回事

例子:查詢某個員工的姓名、薪水、工種,  使用存儲過程實現

/*
 查詢某個員工的姓名,薪水,職位  
*/
create or replace procedure queryEmpInfo(eno in number,
                               pename out varchar2,
                               psal out number,
                               pjob out varchar2) 
as

begin
  select ename,sal,job into pename,psal,pjob from emp where empno=eno;                        
end;

plsql測試:

選擇存儲過程、還是存儲函數?

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM