1. 子程序的各個部分:
聲明部分、可執行部分、異常處理部分(可選)
2.子程序的分類:A. 過程 - 執行某些操作
a. 創建過程的語法:
CREATE [OR REPLACE] PROCEDURE <procedure name> [(<parameter list>)] IS|AS
<local variable declaration>
BEGIN
<executable statements>
[EXCEPTION
<exception handlers>]
END;
b. 過程參數的三種模式:
IN:用于接受調用程序的值、默認的參數模式
OUT:用于向調用程序返回值
IN OUT:用于接受調用程序的值,并向調用程序返回更新的值
c. 將過程的執行權限授予其他用戶:
SQL> GRANT EXECUTE ON find_emp TO MARTIN;
SQL> GRANT EXECUTE ON swap TO PUBLIC;
d. 刪除過程:SQL> DROP PROCEDURE find_emp;
B. 函數 - 執行操作并返回值
a. 創建函數的語法:
CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations]
BEGIN
Executable Statements;
RETURN result;
EXCEPTION
Exception handlers;
END;
b. 定義函數的限制:
函數只能接受 IN 參數,而不能接受 IN OUT 或 OUT 參數
形參不能是 PL/SQL 類型
函數的返回類型也必須是數據庫類型
c.訪問函數的兩種方式:使用 PL/SQL 塊、使用 SQL 語句
3. 子程序的優點:
模塊化、可重用性、可維護性、安全性
4. 程序包:
是對相關過程、函數、變量、游標和異常等對象的封裝
A. 程序包由規范和主體兩部分組成
a.規范:聲明程序包中公共對象。包括類型、變量、常量、異常、游標規范和子程序規范等
b.主體:聲明程序包私有對象和實現在包規范中聲明的子程序和游標
B . 創建程序包
a. 程序包規范
CREATE [OR REPLACE] PACKAGE package_name IS|AS
[Public item declarations] [Subprogram specification]
END [package_name];
b. 程序包主體
CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS
[Private item declarations]
[Subprogram bodies]
[BEGIN Initialization]
END [package_name];
5. 程序包的優點
a. 模塊化
b. 更輕松的應用程序設計
c. 信息隱藏
d. 新增功能
e. 性能更佳
6. 程序包中的游標
A. 游標的定義分為游標規范和游標主體兩部分
B. 在包規范中聲明游標規范時必須使用 RETURN 子句指定游標的返回類型
RETURN子句指定的數據類型可以是:
a. 用 %ROWTYPE 屬性引用表定義的記錄類型
b. 程序員定義的記錄類型
7. 有關子程序和程序包的信息
A. USER_OBJECTS 視圖包含用戶創建的子程序和程序包的信息
SELECT object_name, object_type FROM USER_OBJECTS WHERE object_type IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY');
B. USER_SOURCE 視圖存儲子程序和程序包的源代碼
SELECT line, text FROM USER_SOURCE WHERE NAME='TEST';
8. 觸發器:
是當特定事件出現時自動執行的存儲過程(特定事件可以是執行更新的DML語句和DDL語句)
注意:觸發器不能被顯式調用
9. 觸發器的功能:
自動生成數據、自定義復雜的安全權限、提供審計和日志記錄、啟用復雜的業務邏輯
10. 創建觸發器的語法
CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name
[REFERENCING {OLD [AS] old / NEW [AS] new}] [FOR EACH ROW]
[WHEN (condition)] pl/sql_block;
11. DML觸發器的相關概念
A. BEFORE觸發器:是在某種操作發生之前執行的觸發器
B. AFTER觸發器:是在某種操作發生之后執行的觸發器
C. 語句級觸發器:無論受影響的行數是多少,都只執行一次
D. 行級觸發器:對DML語句修改的每個行執行一次
E. NEW偽記錄:只在UPDATE和INSERT DML觸發器內可用,它包含了修改發生后被 影響的行的值
F. OLD偽記錄:只在UPDATE和DELETE DML觸發器內可用,它包含了修改發生前被 影響的行的值
G. WHEN子句:某段代碼是否被執行
12.觸發器由三部分組成:
A. 觸發器語句(事件):定義激活觸發器的 DML 事件和 DDL 事件
B. 觸發器限制:執行觸發器的條件,該條件必須為真才能激活觸發器
C. 觸發器操作(主體):包含一些 SQL 語句和代碼,它們在發出了觸發器語句且觸發限制的值為真時運行
13. DML觸發器:
當表發生數據修改事件(增加、刪除、修改)自動執行的PL/SQL 塊
語法:
CREATE OR REPLACE TRIGGER 觸發器名稱{AFTER|BEFORE } --指定觸發時機{INSERT|DELETE|UPDATE}--指定觸發事件類型ON 表名--指定所監控的表{FOR EACH ROW} --指定觸發次數
------上面:執行條件--------------下面:執行代碼----------------declare
BEGIN 代碼;END;
14. 條件謂詞
INSERTING、UPDATING、DELETING
15. 觸發器應用
使用場合:控制數據安全、實現數據審計、實現數據完整性、實現參照完整性
16. INSTEAD OF觸發器(替代觸發器)
17.系統事件觸發器
18.管理觸發器
A. 啟用和禁用觸發器:何時禁止:數據導入導出時禁止
SQL> ALTER TRIGGER aiu_itemfile DISABLE;
SQL> ALTER TRIGGER aiu_itemfile ENABLE;
B. 重新編譯觸發器:數據庫對象發生改變后
C. 刪除觸發器
SQL> DROP TRIGGER aiu_itemfile;
19. 觸發器和存儲過程
觸發器 存儲過程
編寫 無參數,返回值 有參數,有返回值(參數)
編寫 不能commit或rollback 能
調用方式 事件發生時自動調用 手工調用
操作對象 基于某張表 與表無關
20.JDBC連接Oracle數據庫Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection con = null;
con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:數據庫實例);
21. 在JDBC中執行PL/SQL匿名塊
A.步驟:a. 明確PreparedStatement執行匿名塊的字符串
b. 創建PreparedStatemen對象
c. 根據需要設定綁定變量
d. 執行PreparedStatement對象
22. 在JDBC中執行PL/SQL的存儲過程
A. 語法:
a. {call 過程名[(?,?,?....)]} //訪問帶參數的存儲過程
b. {? = cal 過程名[(?,?,?.......)]} //訪問返回結果參數的存儲過程
c. {call 過程名} //訪問不帶參數的存儲過程
B.步驟:a. 明確CallableStatement調用字符串
b. 創建CallableStatement對象( CallableStatement = Connection.prepareCall(sql);)
c. 綁定輸入(IN)參數
d. 注冊輸出(OUT)參數(CallableStatement .registerOutParameter(索引, OracleTypes.數據類型))
e. 執行CallableStatement對象返回結果
新聞熱點
疑難解答