1. 程式人生 > >oracle PL/SQL高階程式設計

oracle PL/SQL高階程式設計

PL/SQL高階程式設計

實驗目的:
1、掌握PL/SQL的資料結構和程式設計結構,掌握應用PL/SQL編寫簡單程式的方法
2、理解儲存過程的概念,掌握編寫儲存過程的方法
3、理解函式的概念,掌握編寫儲存過程的方法
實驗內容:
一、PL/SQL程式設計基礎
1、pl/sql的組成:宣告塊、執行塊、異常處理塊
2、編制程式碼實現1+2+...+100的計算
declare
n int;
result int;
begin
n:=0;
result:=0;
while n<=100 loop
result:=result+n;
n:=n+1;
end loop;
dbms_output.put_line('結果是'||result);
end;


二、儲存過程程式設計
1、儲存過程的概念
procedure 儲存過程,儲存在資料庫中的不帶返回值的命名PL/sql程式塊,(可以反覆使用複雜操作,並提高執行效率)

2、儲存過程的語法
create or replace procedure procedureName(parm parmType)
as
local varible defination
begin
procedure body;
end;

3、編寫求u1+2+...+100的結果並顯示的儲存過程
create or replace procedure sp_calcSum
as
begin
...
end;

4、編寫求1+2+...+n的帶引數的儲存過程
create or replace procedure sp_calcSum(pEndNumber int)
as
begin
...
end;

三、函式程式設計
1、函式的概念
function函式,儲存在資料庫中的帶返回值的命名pl/sql程式塊

2、函式的語法
create or replace function functionName(parm parmType) return resultType
as
local varible defination
begin
function body
return result;
end;

3、編寫求1+2+...+100的函式
create or replace function f_calcSum() return int
as
begin
...
return result;
end;

4、編寫求1+2+...+n的函式
create or replace function f_calcSum(pEndNumber int) return int
as
begin
....
return result;
end;



四、儲存過程與函式的應用
1、編寫將指定部門號的所有員工薪水增加指定值的儲存過程,並呼叫此儲存過程將30號部門的薪水增加1000
編寫儲存過程 sp_AlterSalByDeptno(pSalDelta,pDeptno)
呼叫儲存過程將30號部門的薪水增加1000元 execute sp_AlterSalByDeptno(1000,30)
與使用update語句進行對比

 

2、編寫求指定部門號的所有員工平均薪水的函式,並呼叫此函式計算30號部門的平均薪水
編寫函式 f_GetAvgSalByDeptno(pDeptno)
呼叫函式求出30號部門的平均薪水並顯示tempSal:=f_GetAvgSalByDeptno(30)
與使用select語句進行對比


3、結論
需要頻繁重複的資料庫操作通常會編制專門的儲存過程或函式
儲存過程應用: 先建立儲存過程(編寫sql語句,將編寫的程式碼編譯後儲存在資料庫中,同時儲存了編寫的plsql語句和對應的編譯後的機器操作指令),再使用儲存過程(直接呼叫機器操作指令)
sql語句:update emp set sal=sal+1000 where deptno=30;先檢查sql是否正確,再轉換成機器操作指令,最後執行機器操作

對比:
while deptno in(10,20,30) loop
execute alterSalBydeptno(delta,target); ---1  每次只需直接執行
update emp set sal=sal+delta where deptno=target;  ---2  每次執行都要檢查、轉換、執行
DeptnoMoveNext();
end loop

可以在此段程式碼執行前後分別獲取當前時間,檢查其兩種方式所用時間的差別