存儲過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經編譯后存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到存儲過程。
優點:效率高,復用性強,安全性高
存儲過程的結構:oracle的存儲過程包含三部分:過程聲明,執行過程部分,存儲過程異常(可省略)。
接下來我們來詳細講述一下存儲過程
存儲過程的語法
create:創建 關鍵字
or replace: 如果此名稱的存儲過程已經創建了,那么用這兩個關鍵字可以替換同名的存儲過程,不用會報錯,可以省略。
procedure:存儲過程 意思是創建的是一個存儲過程
pro_name: 存儲過程的名稱。
(參數): 存儲過程的參數,可以省略,有參的存儲過程在寫參數的時候要指定參數的數據類型。
as: 也可以寫成is。
plsql_sentences: pl/sql語句,他是存儲過程功能實現的主體。
dowith_sentences: 異常處理語句,也是pl/sql語句,可以省略。
1 create [or replace] procedure pro_name (參數) as 2 begin 3 plsql_sentences; 4 [exception] 5 [dowith_sentences;] 6 end pro_name;
存儲過程的學習
存儲過程的創建(pl/sql)
首先打開plsql軟件,在左側找到procedures文件夾,里面的就是你的存儲過程,在上面右鍵--新建--輸入存儲過程的名字和參數(名字在里面也可以改,參數可以暫時不管)
無參存儲過程
上面的介紹對於一些初學者可能不那么好理解,那么我們先用一個例子來讓大家認識一下存儲過程。
首先我們在oracle中創建一個表(表名T_USER)表結構如下
例子:寫一個無參存儲過程,向t_user表中添加一條數據。
1 create or replace procedure test1 as 2 begin 3 insert into t_user values('1','張三',22,1,'13718770909',sysdate); 4 commit; 5 end test1;
要注意:test1為存儲過程的名字,commit意思是提交事務,end后面跟的一定是存儲過程的名字。
有參存儲過程
那么通過上面的例子我們就基本知道了無參存儲過程的大概。那么接下來讓我們看看有參存儲過程是怎么寫的。
首先我們先介紹一下存儲過程的參數
存儲過程可以接受多個參數,參數模式包括三種:
in:輸入類型 默認 不可修改 可以省略
out:輸出類型 只能等待被賦值 不可省略
in out:兼顧上面兩種 不可省略 不建議使用這種,如果遇到這種情況,完全可以拆開成兩個參數
例子:寫一個有參的存儲過程,向t_user表中添加一條數據。要求插入的數據都要用參數傳遞過來的數據。
1 create or replace procedure test2(id varchar2,name varchar2,age number,sex number,tel varchar2,create_time date) is 2 begin 3 insert into t_user values (id,name,age,sex,tel,create_time); 4 commit; 5 end test2;
要注意:test2為存儲過程的名稱,每個參數要表明類型,但是不能指定長度,參數的名稱可以隨便起。
存儲過程的檢查
一個存儲過程在創建之后,需要我們驗證一下語法是否正確,方法是點擊下圖的執行按鈕(齒輪) 如果最下面出現了編譯成功,那么說明此存儲過程語法上沒有問題。如果有報錯,就根據提示信息進行修改即可。
存儲過程的調用
寫好的存儲過程,在oracle中怎么調用呢?
首先打開一個sql操作頁面(文件--新建-sql窗口),根據我們所寫的存儲過程的參數,可以使用call關鍵字進行調用
比如上面兩個例子(test1,test2),他們的調用方法分別為
1 --無參調用方法 2 call test1() 3 --有參調用方法 4 call test2('11','張三',11,0,'13567667897',sysdate)
存儲過程的刪除
當一個存儲過程不再被需要的時候,要將此過程從內存中刪除,以釋放相應的內存空間,方法一共有兩種
1. 語句刪除L:drop procedure test1 //test1是存儲過程的名稱
2. 使用pl/sql工具,直接在左側的procedures文件夾中找到那個存儲過程文件,右鍵刪除即可。
存儲過程的調試
在左側的procedures文件夾中找到你要調試的存儲過程文件,右鍵選擇測試,之后按下圖操作
上面的紅框中的五個按鈕 從左到右分別為:運行,單步進入(重要),單步跳過,單步退出,運行到下一個異常,一般我們只用到單步進入就可以了。
操作順序為:點擊運行按鈕,之后一步步點擊單步進入按鈕即可。
特別注意:我們在存儲過程中可以寫dbms_output.put_line('ok'); 括號中的ok為參數 類似於java里的System.out.println("ok"); 可以在DBMS輸出中看到
接下來會繼續更新存儲過程中的一些其他的知識及技巧和用法。