1. 程式人生 > 資料庫 >PL/SQL程式設計

PL/SQL程式設計

PL/SQL程式設計
1.1 PL/SQL基礎
1.1.1 PLSQL概念
Procedural Language / SQL , 過程語言/SQL,是結合了Oracle過程語言和結構化查詢語言的一種擴充套件語言。通過PL/SQL可以編寫出具有很多高階功能的程式
在PLSQL塊中,可以使用select,insert,update,delete等DML語句,事務控制語句及SQL函式,但不允許直接使用create,drop,alter等DDL語句,可以通過動態SQL執行。
1.1.2 PLSQL特點
 具有程式語言的特點
 能夠給程式新增控制語句
 擁有異常處理機制
 可移植性好
 減少網路的互動,提高程式效能

1.1.3 PLSQL組成
一個PL/SQL塊由3部分組成,分別是宣告部分,執行部分,異常處理部分,其中執行部分不能省略。
[DECLARE]
–此處宣告變數、遊標等
BEGIN
–執行部分,過程或SQL語句,即程式主體
[EXCEPTION]
–異常捕捉部分
END
1.1.4 變數和常量
1.1.4.1 變數的定義
變數名 資料型別 [:=賦值];
例如: v_name VARCHAR2(20);
1.1.4.2 變數的賦值
v_name VARCHAR2(20) := ‘張三’;

1.1.4.3 常量
語法:變數名 CONSTANT 資料型別 [:=賦值];
v_name CONSTANT VARCHAR2(20) := ‘張三’;

1.1.4.4 注意
 變數名長度不能超過30個字元
 第一個字元必須是字母
 不區分大小寫
 不能使用減號
 不能使用sql關鍵字

1.1.5 屬性型別
 %type : 引用某張表中某列的型別
v_name emp.ename%type := ‘tom’;
 %rowtype :引用某張表中一行的型別
v_row emp%rowtype;
select * into v_row from emp where empno=7788;
1.1.6 註釋
單行註釋:–
多行註釋:/* */
1.1.7 控制語句
1.1.7.1 概述
控制語句共有3種類型,分別是條件控制、迴圈控制和順序控制

1.1.7.2 條件控制
1.1.7.2.1 概述
條件控制用於根據條件執行一系列語句,包括if和case語句

1.1.7.2.2 If

1.1.7.2.3 if-else

1.1.7.2.4 if-elsif-else

注意:不能寫成elseif

1.1.7.2.5 case

1.1.7.3 迴圈控制
1.1.7.3.1 概述
迴圈控制有3種類型,分別是loop、while、for迴圈
1.1.7.3.2 loop迴圈

1.1.7.3.3 While迴圈

1.1.7.3.4 for迴圈

1.1.7.4 順序控制
順序控制用於按順序執行語句,包括null和goto語句,不推薦使用goto
null語句:null語句是一個可執行語句,相當於一個佔位符或不執行任何操作的空語句
1.2 異常處理
1.2.1 分類
預定義異常:當 PL/SQL 程式違反 Oracle 規則或超越系統限制時隱式引發 使用者定義異常:使用者可以在 PL/SQL 塊的宣告部分定義異常,自定義的異常通過 RAISE 語句顯式引發
1.2.2 預定義異常

1.2.3 使用者自定義異常
 使用RAISE關鍵字引發異常
 使用EXCEPTION關鍵字處理異常

1.2.4 案例
1.2.4.1 預定義異常

1.2.4.2 自定義異常

1.3 遊標
1.3.1 基本原理
 遊標是指向查詢結果區域的一個指標
 遊標為應用程式提供了一種對多行資料查詢結果集中的每行資料進行單獨處理的辦法
1.3.2 遊標分類
靜態遊標:隱式遊標和顯示遊標
動態遊標
1.3.3 顯示遊標
1.3.3.1 使用步驟

  1. 宣告遊標
  2. 開啟遊標
  3. 提取遊標
  4. 關閉遊標
    1.3.3.2 宣告遊標

1.3.3.3 開啟遊標

1.3.3.4 提取遊標

1.3.3.5 關閉遊標

1.3.3.6 顯式遊標屬性
 %FOUND :只有在DML語句影響一行或者多行時才返回true,表示有執行結果
 %NOTFOUND :與上一個屬性相反,如果沒有影響任何行則返回true
 %ROWCOUNT:返回受影響行數,如果沒有,則返回0
 %ISOPEN:判斷遊標是否開啟
1.3.3.7 案例

1.4 儲存過程
1.4.1 概念
儲存過程相當於java中的方法,可以實現方法的重用
1.4.2 建立儲存過程
1.4.2.1 語法
create [or replace] procedure procedure_name
[(parameter_list)]
{is | as}
[local_declarations]
begin
executable_statements
[exception]
[exception_handlers]
end [procedure_name];

1.4.2.2 案例
1.4.2.2.1 無參

1.4.2.2.2 帶參無返回值

1.4.2.2.3 帶參有返回值

1.4.3 呼叫儲存過程
1.4.3.1 PLSQL直接呼叫

1.4.3.2 SQLPlus命令呼叫

1.4.4 儲存過程的引數傳遞
 按位置傳遞
proc_calc(5, 6);
 按名稱傳遞
proc_calc(num2=>1, num1=>2);
1.4.5 儲存過程的引數模式
 in 輸入引數,預設
 out 輸出引數
 int out 輸入輸出引數
1.4.6 儲存過程的訪問許可權
必須擁有建立儲存過程的許可權
grant execute on proc_calc to 使用者名稱;
1.4.7 刪除儲存過程
Drop procedure 儲存過程名稱
1.5 儲存過程的除錯與跟蹤
 建立儲存過程
 在瀏覽器視窗Procedures節點找到要除錯的儲存過程
 選中要除錯的儲存過程右鍵 --> 新增除錯資訊
 選中要除錯的儲存過程右鍵 --> 測試,開啟測試視窗
 在右側除錯視窗先填寫儲存過程的引數值
 點選開始偵錯程式開始除錯,然後點選單步進入或者單步跳過開始執行
 想要檢視的值可以在變數視窗填寫
1.6 儲存過程規則
 輸入引數的in關鍵字可有可無
 輸入引數不能帶長度
 is/as任選其一但不能省略
 區域性變數宣告不能寫declare關鍵字
 每一個區域性變數宣告完成都要分號結束
 結束可以用end,也可以用end proc_name