(三)PL/SQL 數據庫
Procedure Language / SQL 存儲過程 函數
命名程序:存儲過程,函數,觸發器 oop
--------------------------------------基礎語法-------------------------------------------- 測試
1. 語句塊: ui
begin spa
dbms_output.put_line('HelloWorld'); 對象
end; 內存
2. 定義變量 字符串
declare mui
num number(4);
name varchar2(10);
begin
num := 1001;
name := 'amui'; -- :=是賦值操做
dbms_output.put_line(num || ':' || name); -- ||鏈接字符串,至關於+
end;
3. if語句
a) 示例1:
declare
age number(2);
begin
age := 19;
if age > 20 then
dbms_output.put_line('A');
else
dbms_output.put_line('B');
end if; --要記得end if
end;
b) 示例2:
4. case結構
5. 循環
a) loop循環語法實例:
b) while循環語法實例
c) for循環語法實例
6. PL語句與SQL語句結合使用
a) 示例1:插入一條數據:
其中,在declare定義語句中,v_empno emp.empno%type表示v_empno的類型是參考自數據庫
中表emp中的屬性empno的類型。
b) 示例2:查詢數據(查詢某個具體值,將其賦給PL中的變量)
注意與常規SQL語句不同
select ename into v_ename from emp where empno = v_empno;
c) 示例3:
語句 v_emprowData emp%rowtype; 表示變量 v_emprowData 參考自表emp中的一行數據。
變量v_emprowData 至關於一個對象。
--------------------------------------存儲過程------------------------------------------
1. 存儲過程定義:(無參存儲過程)
2. 調用存儲過程的方式:
a) 命令調用:
exec my_pro1;
b) 過程調用:
begin
my_pro1;
end;
c) 使用Java程序調用:
{call my_pro1}
3. 有參存儲過程:
a) 需求:建立一個存儲過程,根據員工編號返回員工信息。
在該參數列表中,能夠寫成 v_empno number , 可是number上不能標識長度大小。
in 表示傳入的參數,out表示傳出參數,即返回值。
b)調用帶有輸入參數和輸出參數的存儲過程:
不能使用命令調用帶有輸出參數的存儲過程!
4. 自聯表
若是輸入輸出參數的類型同樣,能夠簡寫以下:
-----------------------------------------程序包---------------------------------------------
程序包:用於存儲過程,函數,類型
1. 定義程序包:
2. 建立包體,包體的名字和包名相同
3.調用包中的存儲過程
exec mypack1.mypro1;
----------------------------------------遊標---------------------------------------------
遊標:cursor,一個內存區域,不是類型
1. 需求:建立返回一個表中多條記錄的存儲過程(使用遊標,建立一個參照遊標特性的類型)
a) 獲取一條數據:
b) 循環獲取多條數據:
mycursor%found 表示判斷,判斷是不是否存在
2.在程序包中定義參照遊標的類型
a) 需求:建立一個存儲過程,返回EMP表全部記錄
1)建立程序包,包中定義類型
2)調用包:參數中須要用到參照遊標特性的類型,須要調用包
如下示例功能是根據每頁數據數算出最大頁數,同時返回從某一頁的數據。
3)測試: