pl/sql(procedural language/sql)是oracle在標準的sql語言上的擴展。pl/sql不僅允許嵌入sql語言,還可以定義變量和常量,允許使用條件語句和循環語句,允許使用例外處理各種錯誤,這樣使得它的功能變得更加強大。
1. 爲什麼學pl/sql?
(1). 提高應用程序的運行性能
(2). 模塊化的設計思想 [ 分頁的過程,訂單的過程,轉賬的過程。。]
(3). 減少網絡傳輸量
(4). 提高安全性(sql會包括表名,有時還可能有密碼,傳輸的時候會泄露。PL/SQL就不會)
2. 不好的地方
(1). 移植性不好(換數據庫就用不了)
(2). 用什麼編寫pl/sql
3. 舉一個簡單的案例
編寫一個存儲過程,該過程可以向某表中添加記錄。
(1). 創建一個簡單的表
create table mytest(name varchar2(30),passwd varchar2(30));
(2). 創建過程
replace:表示如果有sp_pro1,就替換
如何查看錯誤信息:show error;
(3). 如何調用該過程:
1)exec 過程名(參數值1,參數值2...);
2)call 過程名(參數值1,參數值2...);
4. pl/sql介紹
開發人員使用pl/sql編寫應用模塊時,不僅需要掌握sql語句的編寫方法,還要掌握pl/sql語句及語法規則。pl/sql編程可以使用變量和邏輯控制語句,從而可以編寫非常有用的功能模塊。比如:分頁存儲過程模塊、訂單處理存儲過程模塊、轉賬存儲過程模塊。而且如果使用pl/sql編程,我們可以輕鬆地完成非常複雜的查詢要求。
(1). 簡單分類
|————過程(存儲過程)
|
|————函數
塊(編程)———|
|————觸發器
|
|————包
(2). 編寫規範
a. 單行註釋 --
select * from emp where empno=7788; --取得員工信息
b. 多行註釋 /*...*/ 來劃分
(3). 標誌符號的命名規範
1).當定義變量時,建議用v_作爲前綴v_sal
2).當定義常量時,建議用c_作爲前綴c_rate
3).當定義遊標時,建議用_cursor作爲後綴emp_cursor
4).當定義例外時,建議用e_作爲前綴e_error
5. pl/sql塊介紹
塊(block)是pl/sql的基本程序單元,編寫pl/sql程序實際上就是編寫pl/sql塊,要完成相對簡單的應用功能,可能只需要編寫一個pl/sql塊,但是如果想要實現複雜的功能,可能需要在一個pl/sql塊中嵌套其它的pl/sql塊。
pl/sql 塊由三個部分構成:定義部分,執行部分,例外處理部分。
如下所示。
declare
/*定義部分——定義常量、變量、遊標、例外、複雜數據類型*/
begin
/*執行部分——要執行的pl/sql語句和sql語句*/
exception
/*例外處理部分——處理運行的各種錯誤*/
end;
定義部分是從declare開始的,該部分是可選的;
執行部分是從begin開始的,該部分是必須的;
例外處理部分是從exception開始的,該部分是可選的。
pl/sql塊的實例
(1). 實例1-只包括執行部分的pl/sql塊
dbms_output是oracle所提供的包(類似java的開發包),該包包含一些過程,put_line就是dbms_output包的一個過程。
(2). 實例2-包含定義部分和執行部分的pl/sql塊
如果要把薪水也顯示出來,那麼執行部分就應該這麼寫:
select ename,sal into v_ename,v_sal from emp where empno=&aa;
& 表示要接收從控制檯輸入的變量。
(3). 實例3-包含定義部分,執行部分和例外處理部分
爲了避免pl/sql程序的運行錯誤,提高pl/sql的健壯性,應該對可能的錯誤進行處理,這個很有必要。
1.比如在實例2中,如果輸入了不存在的僱員號,應當做例外處理。
2.有時出現異常,希望用另外的邏輯處理,[網示]
相關說明:
oracle事先預定義了一些例外,no_data_found就是找不到數據的例外。