存儲過程

1 概述

存儲過程是數據庫中的一個重要對象,是一組爲了完成特定功能的sql語句集(子程序)。經編譯後存儲在數據庫中,用戶通過指定存儲過程的名稱並給出參數來執行。 由於存儲過程在創建時即在數據庫服務器上進行了編譯並存儲在數據庫中,所以存儲過程運行要比單個的SQL語句塊要快。

2 存儲過程的創建和調用

2.1 存儲過程的創建

create [or replace] procedure 存儲過程名[參數]
is|as 聲明部分
begin
pl/sql程序體
end;

  • or replace 可選,表示的意義是如果不存在就創建,存在就替換。
  • 參數 可選,分爲輸入參數和輸出參數。

示例:
create procedure sayhello
is
begin
dbms_output.put_line(‘hello’);
end;

2.2 存儲過程的調用

(1)直接執行 execute 存儲過程名();
調用上邊創建的sayhello存儲過程
execute sayhello();
(2)在pl/sql塊中調用 begin 存儲過程名() end;
begin
sayhello();
end;
示例:帶in參數的存儲過程
爲指定的員工,漲100塊錢的工資;並且打印漲前和漲後的薪水
1、創建一個帶參數的存儲過程:
給執行的員工漲100塊錢的工資,並且打印漲前和漲後的薪水

create or replace procedure raisesalary(eno in number)
as
--定義一個變量保存漲前的薪水
psal emp.sal%type;
begin
--得到員工漲前的薪水
select sal into psal from emp where empno=eno;
--給該員工漲100
update emp set sal=sal+100 where empno=eno;
--一般不在存儲過程中,commit和rollback
dbms_output.put_line('漲前:'||psal||'漲後:'(psal+100))
end; 

2、如何調用:

begin
raisesalary(7839);
raisesalary(7566);
commit;
end;

3 out參數

它是一種輸出類型的參數,表示這個參數在存儲過程中已經被賦值。並且這個參數值可以傳遞到當前存儲過程以外的環境中。關鍵字out位於參數名稱之後。
示例:

--out參數存儲過程的構建
create or replace procedure show(eno in emp.empno%type,pname out emp.ename%type,psal out emp.sal%type)
is
begin
--找出員工編號對應的姓名和工資並賦值給out參數
select ename,sal into pname,psal from emp where empno=eno;
end;
--存儲過程的調用
set serveroutput on
declare
--聲明變量對應out參數
ppname emp.ename%type;
ppsal  emp.sal%type;
begin
show(7369,ppname,ppsal);
dbms_output.put_line(7369||'的姓名是:'||ppname||'薪水是:'||ppsal);
end;
發佈了27 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章