10 儲存過程

2021-05-25 02:07:09 字數 4149 閱讀 1590

儲存過程

儲存過程是一種命名

pl/sql

程式塊,

它可以被賦予引數

,儲存在資料庫中

,可以被使用者呼叫

.由於儲存過程是已編譯好的**

,所以在呼叫的時候不必再次編譯**,從而提高程式的執行效率。另外儲存過程可以實現程式的模組化設計.

1、建立儲存過程

語法:create [or replace] procedure procedure_name

[ (parameter) data_type

,(parameter) data_type,……

]decoration section

begin

executable section;

exception

exception handlers;

end;

procedure_name

儲存過程的名稱

parameter

引數in

向儲存過程傳遞引數

out:從儲存過程返回引數

in out:

傳遞和返回引數

data_type:

引數的型別

不能夠指明長度

as|is

後宣告的變數主要過程體內

,且不能加

declare

語句。//

建立乙個插入

emp中記錄的儲存過程

sql> create procedure insert_emp as

2begin

3insert into emp(empno,ename,job,mgr,sal,comm,deptno)

4values('7777','redarmy','teacher','7369',9000,1000,20);

5commit;

6end insert_emp; 7/

2、

呼叫儲存過程

sql> set serveroutput on;

sql> begin

2insert_emp;

3end; 4/

3、修改儲存過程

sql> create or replace procedure insert_emp as//

修改時只需加or replace就可以了 裡邊的儲存過程就可以修改了

2begin

3insert into emp(empno,ename,job,mgr,sal,comm,deptno)

4values('7777','redarmy','teacher','7369',9000,1000,20);

5commit;

6end insert_emp; 7

8/ 4、引數

oracle

中有三種引數模型

in out

和in out 1、

in引數

該型別的引數值有呼叫者傳入

,並且只能被儲存過程讀取

,也是預設格式.

案例:sql> create or replace procedure insert_emp(

2cempno in number,

3cename in varchar2,

4cjob in varchar2,

5cmgr in number,

6chiredate in date,

7csal in number,

8ccomm in number,

9cdeptno in number

10) as

11begin

12insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)

13values(cempno,cename,cjob,cmgr,chiredate,csal,ccomm,cdeptno);

14end insert_emp;

15/procedure created

上面建立的儲存過程需要出入引數,在oralce有如下三種方式傳入引數

1、1名稱表示法

語法如下:

引數名稱=>引數值;多個之間用逗號隔開

sql> set serveroutput on;

sql> begin

2insert_emp(cempno=>7377,cename=>'mjjj',cjob=>'stu',cmgr=>7777,chiredate=>to_date('2011-01-01','yyyy-mm-dd'),csal=>5000,ccomm=>1000,cdeptno=>20);

3end; 4/

1、2位置表示法

當引數比較多時,名稱表示法可能會比較長,為克服名稱表示法的弊端,可以採用位置表示法,注意引數一定要對應。

sql> set serveroutput on;

sql> begin

2insert_emp(3333,'mjjj','stu',7777,to_date('2011-01-01','yyyy-mm-dd'),5000,1000,20);

3end; 4/

1、3混合表示法

sql> set serveroutput on;

sql> begin

2insert_emp(9999,cename=>'mjjj',cjob=>'stu',cmgr=>7777,chiredate=>to_date('2011-01-01','yyyy-mm-dd'),csal=>5000,ccomm=>1000,cdeptno=>20);

3end; 4/

注意:當使用者使用的混合表示法時,分界線之前必須一致,分界線之後必須一致,並且不能穿插。

2、out

引數該型別的引數值是有儲存過程寫入

.out

型別的引數適用於儲存過程向呼叫者返回多條資訊的情況。

//建立乙個根據員工編號查詢員工名稱及薪資儲存過程

sql> create or replace procedure emp_select(cempno in number,

2cename out emp.ename%type,

3csalout emp.sal%type

4) is

5begin

6select ename,sal into cename,csal from emp where empno=cempno;

7exception

8when no_data_found then

9cename:='null';

10csal:=0;

11end emp_select;

12/procedure created

呼叫儲存過程:

out輸出的引數是返回值,也就說在呼叫儲存過程的時候必須有提供能夠接受返回值的變數。

在這裡我們需要使用variable命令繫結引數

sql> variable ename varchar2(20); //

繫結引數的宣告

sql> variable sal number;

sql> begin

2emp_select('7777',:ename,:sal); //

執行儲存過程

3end; 4/

pl/sql procedure successfully completed

ename

---------

redarmy

sal---------

9000

sql> print ename;//

列印相應的引數

ename

---------

redarmy

sql> print sal;//

列印相應的引數

sal---------

9000 3、

in out

引數in

引數可以接收乙個值

,但是不能在儲存過程中修改這個值

,而對於

out引數

,它在呼叫過程時為空

,在過程執行中將為為這個引數指定乙個值,並在執行後返回.

而in out

引數同時具有了

in引數和

out引數的特性

,在過程中可以讀取和寫入該型別的引數。

SqlServer 儲存過程1 0

儲存過程是乙個預編譯的sql語句 編譯後可多次使用。優勢 響應時間上來說有優勢,可以給我們帶來執行效率提高的好處,且使用儲存過程的系統更加穩定 缺點 維護性較差,相對於簡單sql,儲存過程並沒有什麼優勢,並且在進行除錯時比較困難 可以提高執行效率,並且使用儲存過程的系統更穩定。更多的可以參考 隨風飄...

oracle10g oracle 儲存過程的應用

儲存過程 create or replace procedure procedurename parm1 param1 type param2 param2 type is as begin procedurebody end 例子 create or repalce procedure mypro...

Oracle 10g儲存過程學習一

1 建立儲存過程 無引數 create or replace procedure out time isbegin dbms output.put line systimestamp end 呼叫儲存過程 exec out time call out time 2 建立儲存過程 有引數,且顯示指定為...