PL/SQL高級編程
實驗目的:
一、掌握PL/SQL的數據結構和編程結構,掌握應用PL/SQL編寫簡單程序的方法
二、理解存儲過程的概念,掌握編寫存儲過程的方法
三、理解函數的概念,掌握編寫存儲過程的方法
實驗內容:
1、PL/SQL編程基礎
一、pl/sql的組成:聲明塊、執行塊、異常處理塊
二、編制代碼實現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;
2、存儲過程編程
一、存儲過程的概念
procedure 存儲過程,存儲在數據庫中的不帶返回值的命名PL/sql程序塊,(能夠反覆使用複雜操做,並提升執行效率)
二、存儲過程的語法
create or replace procedure procedureName(parm parmType)
as
local varible defination
begin
procedure body;
end;
三、編寫求u1+2+...+100的結果並顯示的存儲過程
create or replace procedure sp_calcSum
as
begin
...
end;
四、編寫求1+2+...+n的帶參數的存儲過程
create or replace procedure sp_calcSum(pEndNumber int)
as
begin
...
end;
3、函數編程
一、函數的概念
function函數,存儲在數據庫中的帶返回值的命名pl/sql程序塊
二、函數的語法
create or replace function functionName(parm parmType) return resultType
as
local varible defination
begin
function body
return result;
end;
三、編寫求1+2+...+100的函數
create or replace function f_calcSum() return int
as
begin
...
return result;
end;
四、編寫求1+2+...+n的函數
create or replace function f_calcSum(pEndNumber int) return int
as
begin
....
return result;
end;
4、存儲過程與函數的應用
一、編寫將指定部門號的全部員工薪水增長指定值的存儲過程,並調用此存儲過程將30號部門的薪水增長1000
編寫存儲過程 sp_AlterSalByDeptno(pSalDelta,pDeptno)
調用存儲過程將30號部門的薪水增長1000元 execute sp_AlterSalByDeptno(1000,30)
與使用update語句進行對比
sql
二、編寫求指定部門號的全部員工平均薪水的函數,並調用此函數計算30號部門的平均薪水
編寫函數 f_GetAvgSalByDeptno(pDeptno)
調用函數求出30號部門的平均薪水並顯示tempSal:=f_GetAvgSalByDeptno(30)
與使用select語句進行對比數據庫
三、結論
須要頻繁重複的數據庫操做一般會編制專門的存儲過程或函數
存儲過程應用: 先建立存儲過程(編寫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
能夠在此段代碼執行先後分別獲取當前時間,檢查其兩種方式所用時間的差異編程