1 存儲過程介紹java
存儲過程是指用於特定操做的pl/sql塊,是由流控制和sql語句書寫的過程。
存儲過程經編譯和sql優化後存儲在數據庫服務器中,使用時候只須要調用便可。sql
2 存儲過程的優勢數據庫
1 使用存儲過程,能夠實現存儲過程設計和編碼工做分開進行,只要將存儲過程名,參數,以及返回信息告訴編碼人員便可。安全
2 使用存儲過程能夠減小sql注入式攻擊,提供系統的安全性。服務器
3 執行存儲過程的用戶要具備必定的權限才能使用存儲過程。沒有數據操做權限的用戶只能在系統控制下間接的存取數據。oracle
4 存儲過程的代碼直接放在了數據庫中,通常由客戶端直接經過存儲過程的名稱來進行調用,簡化客戶端的操做邏輯。優化
3 存儲過程的語法編碼
存儲過程 包含三部分 聲明,執行部分,異常。能夠有無參數的或帶參數的存儲過程。spa
存儲過程的定義:設計
Create [or replace] procedure procedure_name
[(parameter1[mode] datatype1,parameter2 [model] datatype2…)]
IS[As]
Begin
Pl/sql block;
End [procedure_name]
其中: procedure_name是存儲過程的名字,parameter用於指定參數,model用於指定參數模式,datatype用於指定參數類型, IS [AS]用於開始PL/SQL代碼塊。
注:1, 當定義存儲過程的參數時,只能指定數據類型,不能指定數據長度。
2, 創建存儲過程時,既能夠指定存儲過程的參數,也能夠不提供任何參數。
3, 存儲過程的參數主要有三種類型:輸入參數(IN)、輸出參數(OUT)、輸入輸出參數(IN OUT),其中IN用於接收調用環境的輸入參數,OUT用於將輸出數據傳遞到調用環境,IN OUT不只要接收數據,並且要輸出數據到調用環境。
4 一個簡單的存儲過程+調試
寫一個存儲過程--修改其中的數據
select count(*) from table1 where name='weiguo' 的查詢結果是 count(*)=0
若是涉及到兩個或以上的輸入參數,以下圖:
5 存儲過程和java程序的接口操做
5.1 無返回值的存儲過程
查詢數據庫-顯示
5.2 有返回值的存儲過程(非列表-單個出參)
注意,這裏的proc.getString(2)中的數值2並不是任意的,而是和存儲過程當中的out列對應的,若是out是在第一個位置,那就是proc.getString(1),若是是第三個位置,就是proc.getString(3),固然也能夠同時有多個返回值,那就是再多加幾個out參數了。
因爲oracle存儲過程沒有返回值,它的全部返回值都是經過out參數來替代的,列表一樣也不例外,但因爲是集合,因此不能用通常的參數,必需要用pagkage了。
返回列表的存儲過程對我來講,不經常使用。要經過建包+遊標的方式來實現。