(ORACLE)PL/SQL 程式設計
阿新 • • 發佈:2018-12-28
識別符號的規範
1、定義變數,用v_作為字首
2、定義常量,用c_作為字首
3、定義遊標,用_cursor作為字尾
4、定義列外,用e_作為字首
塊(block)
PL\SQL的程式基本單元
編寫PL\SQL程式,其實就是在編寫PL\SQL塊,要完成相對簡單的功能。可能只需要編寫一個PL\SQL快;但要想實現複雜的功能,可能需要在一個PL\SQL塊中巢狀其他的PL\SQL塊。
塊的分類
1、過程(儲存過程)
2、函式
3、觸發器
4、包
塊的結構
PL\SQL塊是由三個部分組成的
1、定義部分
declare 定義常量,變數,遊標,列外,複雜資料型別
2、執行部分
begin 執行PL\SQL語句和SQL語句
3、列外處理部分
exception 處理執行的各種錯誤
end;
定義部分是從declear開始的,這部分是可選的
執行部分是從begin開始的e,這部分是必選的
處理部分是從exception開始的,這部分也是可選的
declare
begin
內容
end;
例1、執行部分的塊
例2、定義和執行部分的塊
如果需要賦值多個變數名,多個變數名與欄位之間,用‘,’號分隔開
(這裡有個坑,例3講)
例3、定義塊部分,執行塊部分,列外處理部分
例2中如果輸入的值,沒有找到對應的資料,程式會丟擲異常,這裡就需要用到列外處理部分(異常處理)
過程
過程用於執行特定的操作,當建立過程時,既可以指定輸入引數(in)也,可以指定輸出引數(out)。通過在過程中使用輸出引數,可以將資料傳遞到執行部分;通過使用輸出引數,可以將執行部分的資料,傳遞到應用環境中。可以使用create procedure 命令來建立過程
建立儲存過程
遍寫一個過程,根據員工姓名,修改員工工資
使用java呼叫儲存過程
函式
函式是用於返回特定的資料,在建立函式的時候,函式頭部必須包含return子句,在函式體內必須包含return語句的返回資料,我們可以使用cerate function 來建立函式。
建立函式
使用SQL PULS呼叫函式
包
包是用於在邏輯上組合過程和函式,他是有包規範和包體兩部分組成
1、使用create package is 命令來建立包
建立的包裡只有宣告的過程和函式,沒有具體的實現過程
2、使用 create package body 包名 is 來建立包體
用來實現剛才建立的包內的過程和函式的具體實現步驟
呼叫包中的過程
使用exec 包名.過程名呼叫
觸發器
觸發器是指隱含執行的儲存過程,當定義出發器時,必須要指定觸發器的事件和觸發的操作,常用的觸發事件包括insert,update,delete語句,而觸發操作,實際上就是一個pl/sql塊可以使用create trigger 來建立觸發器
變數的型別
1、標量型別 scalar
2、複合型別composite
3、參照型別reference
4、lob(large object)
標量(scalar)
在定義好變數後,就可以使用的變數。使用:=賦值。
存放單個數據。
輸入員工的編號,查詢姓名,工資 和稅後工資
標量(scalar)%type型別
根據列的型別,來確定變數的型別和長度
使用方法:
識別符號名 表名.列名%type;
複合變數(composite)
用於存放多個值的變數,主要包括這幾種
PL/SQL記錄
PL/SQL表
巢狀表
varray(變長陣列)
複合型別-PL/SQL --記錄–
類似於java當中的類
把A物件中的元素,篩選出自己需要的元素,建立一個B物件,根據篩選條件,從A物件中篩選元素相應的值,同時在B物件的元素中體現。
複合型別-PL/SQL --表–
相當於java中的陣列
java中的陣列下標不能為負數,PL/SQL表的下標是可以為負數的,並且表元素的小標沒有限制
參照變數
參照變數是指存放數值指標的變數,通過使用參照變數可以使應用程式共享相同的物件,從而降低佔用的空間,在編寫PL/SQL程式時,可以使用遊標變數(ref cursor)和物件型別變數(ref obj_type)兩種參照型別變數
遊標變數(ref cursor)
使用遊標時,當定義遊標時不需要指定相應的select語句,但是當使用遊標時(open時)需要指定select語句,這樣一個select語句就和一個遊標結合了
編寫一個PL/SQL塊,可以輸入部門號,顯示該部門所有員工姓名和他的工資
PL/SQL 控制結構
條件分支語句
1、if—then
2、if—then—else
3、if—then—elsif—else
判斷全部完成後使用end if 結束判斷
————————————
1、簡單條件判斷
if—then—
編寫一個過程,輸入員工姓名,如果工資低於2000,工資上漲10%
2、二重條件分支
if—then—else—
輸入員工姓名,如果補助不為0,將補助在原有的基礎上加100,如果補助為0,就把補助設為200
3、多重條件分支
if—then—elsif—else
輸入員工編號,如果職位是president 就給他工資加1000,如果職位是manager加500,其他職位加200
迴圈語句
loop
loop是PL/SQL中最簡單的迴圈語句,以loop開頭,end loop結尾,
這種迴圈至少會被執行一次
exit when後面跟退出迴圈的條件
寫一個過程,輸入一個使用者名稱,在使用者表中迴圈新增10次
while迴圈
當條件為ture時,執行迴圈體的語句
以while。條件。loop開始
end loop結束
使用while迴圈 寫一個過程,輸入一個使用者名稱,在使用者表中迴圈新增10次
for迴圈
基本for迴圈
控制變數 i 在隱含中不停增加
java程式呼叫 有返回值的儲存過程
輸入員工編號,返回員工的姓名
Java程式 呼叫返回多個引數的儲存過程
返回結果集的儲存過程
輸入部門號,返回該部門所有僱員的資訊
由於oracle 儲存過程沒有返回值,他的所有引數都是通過out引數來代替,所以要用到列表,由於是集合,所以這裡要用-包-package
1、建立一個包,定義一個遊標,再建立一個返回多條結果的儲存過程
2、使用Java程式呼叫儲存過程
儲存過程返回的是 遊標cursor 說明返回的是多條結果,每一條結果都是一個object物件,在使用ResultSet接收的時候需要向下轉型
分頁過程
分頁模板
使用rownum欄位,查詢emp表中 3-5條記錄
select * from (select t1.*,rownum rn from (select * from emp) t1 where rownum <=5) where rn between 3 and 5;
1、在包中先建立遊標
2、編寫一個儲存過程,傳入三個引數分別是 表名,查詢頁數,和每頁顯示的資料數量;返回三個引數,分別是,分頁頁數,查詢到資訊的總數,每頁顯示的具體資訊。
3、在java中呼叫儲存過程,查詢自己想要的資料