oracle存儲過程的基本結構包含哪些

oracle存儲過程的結構包含三部分:1、過程聲明;2、執行過程部分;3、存儲過程異常,該部分可省略,如果要增強腳本的容錯性和調試的方便性那就寫上異常處理。

oracle存儲過程的基本結構包含哪些

本教程操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

什么是存儲過程

存儲過程: 百度百科上是這樣解釋的,存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集,存儲在數據庫中,經過第一次編譯后再次調用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來調用存儲過程。

簡單的說就是專門干一件事一段sql語句。

可以由數據庫自己去調用,也可以由java程序去調用。

oracle數據庫中存儲過程是procedure。

存儲過程結構

(1)基本結構

Oracle存儲過程包含三部分:過程聲明,執行過程部分,存儲過程異常(可寫可不寫,要增強腳本的容錯性和調試的方便性那就寫上異常處理)

(2)無參存儲過程

/** name_procedure就是自己自定義的存儲過程名 */ create?or?replace?procedure?name_procedure?AS/IS 	變量名1??數據類型; 	變量名2??數據類型; BEGIN 	--要處理的業務邏輯 	EXCEPTION????--存儲過程異常 END?name_procedure;

(3).有參存儲過程

普通參數存儲過程

/* age?類型為number?初始化為20; */ CREATE?OR?REPLACE?PROCEDURE?name_procedure?(param1?TYPE) AS/IS name?varchar(20); age?number?:=20; BEGIN ??--業務處理..... END?;

帶參數的存儲過程并且進行賦值

CREATE?OR?REPLACE?PROCEDURE?存儲過程名稱( ???????s_no?in?varchar, ???????s_name?out?varchar, ???????s_age?number)?AS total?NUMBER?:=?0; BEGIN ??SELECT?COUNT(1)?INTO?total?FROM?student?s?WHERE?s.age=s_age; ??dbms_output.put_line('符合該年齡的學生有'||total||'人'); ??EXCEPTION ????WHEN?too_many_rows?THEN? ????DBMS_OUTPUT.PUT_LINE('返回值多于1行');? END

其中參數IN表示輸入參數,是參數的默認模式。

  • OUT表示返回值參數,類型可以使用任意Oracle中的合法類型。

  • OUT模式定義的參數只能在過程體內部賦值,表示該參數可以將某個值傳遞回調用他的過程

  • IN OUT表示該參數可以向該過程中傳遞值,也可以將某個值傳出去

第7行:查詢語句,把參數s_age作為過濾條件,INTO關鍵字,把查到的結果賦給total變量。

第8行:輸出查詢結果,在數據庫中“||”用來連接字符串

第9—11行:做異常處理

存儲過程語法

(1)運算符

oracle存儲過程的基本結構包含哪些

(2)SELECT INTO STATEMENT語句

  • 將查詢結果賦值給一個變量或多個變量

需求:查出成績為100分的那個學生的姓名,年齡,籍貫

CREATE?OR?REPLACE?PROCEDURE?DEMO_CDD1?IS s_name?VARCHAR2;???--學生名稱 s_age?NUMBER;??????--學生年齡 s_address?VARCHAR2;?--學生籍貫 BEGIN ??--給單個變量賦值 ??SELECT?student_address?INTO?s_address ??FROM?student?where?student_grade=100; ???--給多個變量賦值 ??SELECT?student_name,student_age?INTO?s_name,s_age ??FROM?student?where?student_grade=100; ??--輸出成績為100分的那個學生信息 ??dbms_output.put_line('姓名:'||s_name||',年齡:'||s_age||',籍貫:'||s_address); END

(3)選擇語句

//if?后面一定要添加THEN?相當于Java中的?大括號 IF?s_sex=1?THEN ??dbms_output.put_line('這個學生是男生'); ELSE?IF?THEN ??dbms_output.put_line('這個學生是女生'); ELSE ??dbms_output.put_line('這個學生性別錯誤'); END?IF

(4)循環語句

a.基本循環

LOOP ??IF?表達式?THEN ????EXIT; ??END?IF END?LOOP;

b.while循環

WHILE?表達式?LOOP ??dbms_output.put_line('haha'); END?LOOP;

c.for循環

//a?1?到?20?范圍 FOR?a?in?10?..?20?LOOP ??dbms_output.put_line('value?of?a:?'?||?a); END?LOOP;

推薦教程:《Oracle教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享