您好,登錄后才能下訂單哦!
1、定義
所謂存儲(chǔ)過(guò)程(Procedure),就是一組用于完成特定數(shù)據(jù)庫(kù)功能的SQL語(yǔ)句集,該SQL語(yǔ)句集經(jīng)過(guò)
編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)系統(tǒng)中。在使用時(shí)候,用戶(hù)通過(guò)指定已經(jīng)定義的存儲(chǔ)過(guò)程名字并給出相應(yīng)的存儲(chǔ)過(guò)程參數(shù)
來(lái)調(diào)用并執(zhí)行它,從而完成一個(gè)或一系列的數(shù)據(jù)庫(kù)操作。
2、存儲(chǔ)過(guò)程的創(chuàng)建
Oracle存儲(chǔ)過(guò)程包含三部分:過(guò)程聲明,執(zhí)行過(guò)程部分,存儲(chǔ)過(guò)程異常。
3. 使用存儲(chǔ)過(guò)程的好處:
1.簡(jiǎn)化復(fù)雜的操作
2.增加數(shù)據(jù)的獨(dú)立性
3.提高安全性
4.存儲(chǔ)過(guò)程的語(yǔ)法
CREATE [OR REPLACE] PROCEDURE procedure_name [in | out | in out datatype]
IS|AS
<聲明部分>
begin
<執(zhí)行部分>
exception
<異常部分>
end;
4.1無(wú)參數(shù)的存儲(chǔ)過(guò)程:
create or replace procedure p_test1 as
begin
for i in (select slbh,bdczh from dj_djb where slbh like '20170825%') loop
dbms_output.enable(buffer_size=>null);
dbms_output.put_line(i.slbh||','||i.bdczh);
end loop;
end;
begin
p_test1;
end;
4.2.有參的存儲(chǔ)過(guò)程:
4.2.1.參數(shù)名 IN 數(shù)據(jù)類(lèi)型 DEFAULT 值;
定義一個(gè)輸入?yún)?shù)變量,用于傳遞參數(shù)給存儲(chǔ)過(guò)程。在調(diào)用存儲(chǔ)過(guò)程時(shí),主程序的實(shí)際參數(shù)可以是常量、有值變量或表達(dá)式等。DEFAULT 關(guān)鍵字為可選項(xiàng),用來(lái)設(shè)定參數(shù)的默認(rèn)值。如果在調(diào)用存儲(chǔ)過(guò)程時(shí)不指明參數(shù),則參數(shù)變量取默認(rèn)值。在存儲(chǔ)過(guò)程中,輸入變量接收主程序傳遞的值,但不能對(duì)其進(jìn)行賦值。
ege:
create or replace procedure p_test2 (v_slbh in varchar2 default 201711010025 )
as
v_bdczh dj_djb.bdczh%type;
begin
select bdczh into v_bdczh from dj_djb where slbh =v_slbh;
dbms_output.put_line(v_bdczh);
end;
4.2.2.參數(shù)名 OUT 數(shù)據(jù)類(lèi)型;
定義一個(gè)輸出參數(shù)變量,用于從存儲(chǔ)過(guò)程獲取數(shù)據(jù),即變量從存儲(chǔ)過(guò)程中返回值給主程序。
在調(diào)用存儲(chǔ)過(guò)程時(shí),主程序的實(shí)際參數(shù)只能是一個(gè)變量,而不能是常量或表達(dá)式。在存儲(chǔ)過(guò)程中,參數(shù)變量只能被賦值而不能將其用于賦值,在存儲(chǔ)過(guò)程中必須給輸出變量至少賦值一次。
ege:
create or replace procedure p_test3 (v_slbh varchar2 default 201711010025,v_bdczh out varchar2)
as
begin
select bdczh into v_bdczh from dj_djb where slbh=v_slbh;
dbms_output.put_line(v_slbh||','||v_bdczh);
end ;
....調(diào)用.......
declare
v_1 dj_djb.bdczh%type;
begin
p_test3(v_bdczh=>v_1);
end;
4.2.3.參數(shù)名 IN OUT 數(shù)據(jù)類(lèi)型 DEFAULT 值;
定義一個(gè)輸入、輸出參數(shù)變量,兼有以上兩者的功能。在調(diào)用存儲(chǔ)過(guò)程時(shí),主程序的實(shí)際參數(shù)只能是一個(gè)變量,而不能是常量或表達(dá)式。DEFAULT 關(guān)鍵字為可選項(xiàng),用來(lái)設(shè)定參數(shù)的默認(rèn)值。在存儲(chǔ)過(guò)程中,變量接收主程序傳遞的值,同時(shí)可以參加賦值運(yùn)算,也可以對(duì)其進(jìn)行賦值。在存儲(chǔ)過(guò)程中必須給變量至少賦值一次。
注:如果省略IN、OUT或IN OUT,則默認(rèn)模式是IN。
5.查看存儲(chǔ)過(guò)程錯(cuò)誤原因:
select * from user_errors where name=upper(‘p_test1’);
by wolihaito 2018.03.26
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。