pl/sql(2)
1.存儲(chǔ)過(guò)程
(1)存儲(chǔ)過(guò)程的創(chuàng)建及改動(dòng)
語(yǔ)法:
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] datatype [{(:= | DEFAULT ) defaultvalue}] [, ...])] {IS | AS} BEGIN procedure_body END procedure_name;
語(yǔ)法解析:
IN:輸入?yún)?shù)。
OUT:輸出參數(shù);
IN OUT:就可以輸入也可輸出的參數(shù);
datatype:參數(shù)的數(shù)據(jù)類(lèi)型。此處不能帶精度。
:=|DEFAULT:用于設(shè)置參數(shù)的默認(rèn)值。
? ? ?(2)
? ? ?例1:? ? ? ? ? ? ? ??
? ? ??
? ? ? ? ? ? ? ? ?
? ?過(guò)程的調(diào)用
? ? ? ? ? ? ? ? ???例2:帶兩個(gè)參數(shù)
? ? ? ? ? ? ? ? ? ??? ? ? ?
? ? ? ? ? 過(guò)程調(diào)用 ? ? ? ? ? ? ? ? ?
? ? ? (3)?刪除過(guò)程 DROP PROCEDURE test_procedure;
? ?2.函數(shù)
過(guò)程用來(lái)完畢一項(xiàng)任務(wù),可能不返回值,也可能返回多個(gè)值,過(guò)程的調(diào)用是一條PL/SQL語(yǔ)句;函數(shù)包括RETURN子句,用來(lái)進(jìn)行數(shù)據(jù)操作,并返回一個(gè)單獨(dú)的函數(shù)值,函數(shù)的調(diào)用僅僅能在一個(gè)表達(dá)式中。
語(yǔ)法:--函數(shù)是能夠返回值的命名的 PL/SQL 子程序。 --創(chuàng)建函數(shù)的語(yǔ)法:CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] BEGINExecutable Statements;RETURN result; EXCEPTIONException handlers; END;
例: ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ??
調(diào)用函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? ??
? ? 3.程序包中的游標(biāo) ? ? ? ? ? ? ? 游標(biāo)的定義分為游標(biāo)規(guī)范和游標(biāo)主體兩部分
? ? ? ? ?在包規(guī)范中聲明游標(biāo)規(guī)范時(shí)必須使用 RETURN 子句指定游標(biāo)的返回類(lèi)型
? ? ? ? ?RETURN子句指定的數(shù)據(jù)類(lèi)型能夠是:
? ? ? ? ? ? ? ? ? 用 %ROWTYPE 屬性引用表定義的記錄類(lèi)型
? ? ? ? ? ? ? ? ? 程序猿定義的記錄類(lèi)型
例1: ? ? ?
調(diào)用
? ? ? ?? 例2: ? ? ? 實(shí)現(xiàn)增刪查改:
? ? ? ?4.觸發(fā)器
(1)觸發(fā)器的分類(lèi)
? ? ? ? 觸發(fā)器分為 DML 觸發(fā)器、 INSTEAD OF 觸發(fā)器、DDL 觸發(fā)器和系統(tǒng)觸發(fā)器三種類(lèi)型? ? ? ? DML 觸發(fā)器包含行級(jí)觸發(fā)器、語(yǔ)句級(jí)觸發(fā)器
(2)觸發(fā)器的功能:
? ? ? ? ? ? ? ? ? ?自己主動(dòng)生成數(shù)據(jù)
? ? ? ? ? ? ? ? ? ?自己定義復(fù)雜的安全權(quán)限 例:
針對(duì)周六日不能進(jìn)行改動(dòng)數(shù)據(jù)庫(kù):
測(cè)試:
? ? ? ? ? ? ? ? ? ?提供審計(jì)和日志記錄
? ? ? ? ? ? ? ? ? ?啟用復(fù)雜的業(yè)務(wù)邏輯
(3)行級(jí)觸發(fā)器:
用觸發(fā)器實(shí)現(xiàn)自增的主鍵:
1.
2.效率高
?
?
3.效率低
(4)語(yǔ)法解析:
INSTEAD OF:僅用于替代觸發(fā)器,即event_target必須為視圖,并且必須帶FOR EACH ROW子句
trigger_event:觸發(fā)的事件。能夠是DML事件(INSERT、UPDATE、DELETE、INSERT OR UPDATE、UPDATE OF column_name),系統(tǒng)事件(STARTUP、SHUTDOWN等)。
event_target:即指trigger_event事件是發(fā)生在哪個(gè)對(duì)象上的。如DML事件,那么event_target應(yīng)該是表名或視圖名,假設(shè)是系統(tǒng)事件,那么event_target就應(yīng)該是DATABASE或SCHEMA
FOR EACH ROW:假設(shè)帶此子句。即表示該觸發(fā)器是行級(jí)觸發(fā)器。假設(shè)省略,則是語(yǔ)句級(jí)觸發(fā)器。
WHEN condition?:用于限制行級(jí)觸發(fā)器,僅僅有滿足condition條件,才會(huì)觸發(fā)觸發(fā)器。
(5)改動(dòng)觸發(fā)器的狀態(tài)
觸發(fā)器有ENABLED和DISABLED兩種狀態(tài)。
改動(dòng)某個(gè)觸發(fā)器的狀態(tài)能夠運(yùn)行以下的SQL:
ALTER TRIGGER trigger_name ENABLE | DISABLE;?
使某個(gè)表上的全部觸發(fā)器有效或無(wú)效:
ALTER TABLE table_name {ENABLE | DISABLE} ALL TRIGGERS;?
(6)刪除觸發(fā)器
DROP TRIGGER trigger_name;??
轉(zhuǎn)載于:https://www.cnblogs.com/gccbuaa/p/6775872.html
總結(jié)
- 上一篇: 查看php-fpm 占用内存情况
- 下一篇: 测试用例设计方法(五)路径覆盖