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