標籤:
1 預存程序介紹
預存程序是指用於特定操作的pl/sql塊,是由流量控制和sql語句書寫的過程。
預存程序經編譯和sql最佳化後儲存在資料庫伺服器中,使用時候只需要調用即可。
2 預存程序的優點
1 使用預存程序,可以實現預存程序設計和編碼工作分開進行,只要將預存程序名,參數,以及返回資訊告訴編碼人員即可。
2 使用預存程序可以減少sql注入式攻擊,提供系統的安全性。
3 執行預存程序的使用者要具有一定的許可權才能使用預存程序。沒有資料操作許可權的使用者只能在系統控制下間接的存取資料。
4 預存程序的代碼直接放在了資料庫中,一般由用戶端直接通過預存程序的名稱來進行調用,簡化用戶端的操作邏輯。
3 預存程序的文法
預存程序 包含三部分 聲明,執行部分,異常。可以有無參數的或帶參數的預存程序。
預存程序的定義:
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了。
返回列表的預存程序對我來說,不常用。要通過建包+遊標的方式來實現。
plsql知識梳理-預存程序和java調用