oracle 存储过程
1.創(chuàng)建過(guò)程
與其它的數(shù)據(jù)庫(kù)系統(tǒng)一樣,Oracle的存儲(chǔ)過(guò)程是用PL/SQL語(yǔ)言編寫的能完成一定處理功能的存儲(chǔ)在數(shù)據(jù)庫(kù)字典中的程序。
語(yǔ)法:
create [or replace] procedure procedure_name
[ (argment [ { in| in out }] type,
argment [ { in | out | in out } ] type
{ is | as }
<類型.變量的說(shuō)明>
( 注: 不用 declare 語(yǔ)句 )
Begin
<執(zhí)行部分>
exception
<可選的異常處理說(shuō)明>
end;
l 這里的IN表示向存儲(chǔ)過(guò)程傳遞參數(shù),OUT表示從存儲(chǔ)過(guò)程返回參數(shù)。而IN OUT 表示傳遞參數(shù)和返回參數(shù);
l 在存儲(chǔ)過(guò)程內(nèi)的變量類型只能指定變量類型;不能指定長(zhǎng)度;
l 在AS或IS 后聲明要用到的變量名稱和變量類型及長(zhǎng)度;
l 在AS或IS 后聲明變量不要加declare 語(yǔ)句。
2.使用過(guò)程
存儲(chǔ)過(guò)程建立完成后,只要通過(guò)授權(quán),用戶就可以在SQLPLUS 、Oracle開發(fā)工具或第三方開發(fā)工具來(lái)調(diào)用運(yùn)行。Oracle 使用EXECUTE 語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)存儲(chǔ)過(guò)程的調(diào)用。
語(yǔ)法:
EXEC[UTE] procedure_name( parameter1, parameter2…);
3.開發(fā)過(guò)程
目前的幾大數(shù)據(jù)庫(kù)廠商提供的編寫存儲(chǔ)過(guò)程的工具都沒(méi)有統(tǒng)一,雖然它們的編寫風(fēng)格有些相似,但由于沒(méi)有標(biāo)準(zhǔn),所以各家的開發(fā)調(diào)試過(guò)程也不一樣。下面編寫PL/SQL存儲(chǔ)過(guò)程、函數(shù)、包及觸發(fā)器的步驟如下:
3.1 編輯存儲(chǔ)過(guò)程源碼使用文字編輯處理軟件編輯存儲(chǔ)過(guò)程源碼,要用類似WORD 文字處理軟件進(jìn)行編輯時(shí),要將源碼存為文本格式。
3.2 對(duì)存儲(chǔ)過(guò)程程序進(jìn)行解釋在SQLPLUS或用調(diào)試工具將 存儲(chǔ)過(guò)程程序進(jìn)行解釋;
在SQL>下調(diào)試,可用start 或get 等Oracle命令來(lái)啟動(dòng)解釋。如:
SQL>start c:/stat1.sql
如果使用調(diào)試工具,可直接編輯和點(diǎn)擊相應(yīng)的按鈕即可生成存儲(chǔ)過(guò)程。[1]
3.3 調(diào)試源碼直到正確我們不能保證所寫的存儲(chǔ)過(guò)程達(dá)到一次就正確。所以這里的調(diào)試是每個(gè)程序員必須進(jìn)行的工作之一。在SQLPLUS下來(lái)調(diào)試主要用的方法是:
1.使用 SHOW ERROR命令來(lái)提示源碼的錯(cuò)誤位置;
2.使用 USER_ERRORS 數(shù)據(jù)字典來(lái)查看各存儲(chǔ)過(guò)程的錯(cuò)誤位置。
3.4 授權(quán)執(zhí)行權(quán)給相關(guān)的用戶或角色如果調(diào)試正確的存儲(chǔ)過(guò)程沒(méi)有進(jìn)行授權(quán),那就只有建立者本人才可以運(yùn)行。所以作為應(yīng)用系統(tǒng)的一部分的存儲(chǔ)過(guò)程也必須進(jìn)行授權(quán)才能達(dá)到要求。 在SQLPLUS下可以用GRANT命令來(lái)進(jìn)行存儲(chǔ)過(guò)程的運(yùn)行授權(quán)。
語(yǔ)法:
GRANT system_privilege | role TO user | role | PUBLIC
[WITH ADMIN OPTION]
或
GRANT object_privilege | ALL column ON schema.object
TO user | role | PUBLIC WITH GRANT OPTION
其中:
system_privilege: 系統(tǒng)權(quán)限
role: 角色名
user: 被授權(quán)的用戶名
object_privilege: 所授予的權(quán)限名字,可以是
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
Column: 列名
schema: 模式名
object: 對(duì)象名
4.數(shù)據(jù)字典
USER_SOURCE 用戶的存儲(chǔ)過(guò)程、函數(shù)的源代碼字典
DBA_SOURCE 整個(gè)系統(tǒng)所有用戶的存儲(chǔ)過(guò)程、函數(shù)的源代碼字典
ALL_SOURCE 當(dāng)前用戶能使用的存儲(chǔ)過(guò)程(包括其她用戶授權(quán))、函數(shù)的源代碼字典
USER_ERRORS 用戶的存儲(chǔ)過(guò)程、函數(shù)的源代碼存在錯(cuò)誤的信息字典
總結(jié)
以上是生活随笔為你收集整理的oracle 存储过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 表达式转二叉树
- 下一篇: 如何编写oracle存储过程