1. 程式人生 > >oracle 11gPL/SQL語言基礎

oracle 11gPL/SQL語言基礎

sql特點:

1.面向集合的操作方式.

2.語言簡單.易學易用.

3.同一種語言提供多種使用方式.

4.非過程性的語言.


業務邏輯:

A從他的帳戶匯100元給B.

tab(account,balance)

update tab set balance=balance-100 where account='A';

update tab set balance=balance+100 where account='B';

在資料庫管理系統中使用過程性語言來完成業務邏輯:

oracle  PL/SQL:在sql語言中加入了流程控制語句。

sqlserver T-SQL:在sql語言中加入了流程控制語句。


一、pl/sql特性:

1.移植性好。2.完成複雜功能。3.封裝性好。4.減少網路傳輸。


二、PL/SQL基本結構

[declare]
變數(基本、遊標、異常)的宣告。
begin
sql語句和流程控制語句
[exception]
異常的處理
end;


1、宣告

1)資料型別:
數值型:number
字元型:char(n)定長
        varchar2(n)變長
日期型:date
遊標:cursor 
異常:exception


2)識別符號要求:

字元開頭,後跟_、$、數字、#;最大長度為30位;不能為關鍵字。


3)常量變數定義

常量名 constant 資料型別 := 值;
變數名 變數資料型別[約束][:=值]
變數名 變數資料型別[約束][default 值];


4)定義變數資料型別方法:

變數名 表名.列名%type
變數(record)名 表名%rowtype
  通過 變數(record)名.列名(定義中表的列)來使用


2.begin....end

1)sql語句:

DDL(create alter drop) (這門課中不可以用)

DML(insert delete update select)(PL/SQL中只能這種語言)

DCL(grant revoke)(這門課中不可以用)

2)賦值語句:
變數名:=值;

3)註釋語句:
單行--
多行/*   */

4)流程控制語句:
a.分支語句 if、 case
if(條件表示式) then 語句;
else  語句;
end if;


if(條件表示式) then 語句;
elsif(條件表示式) then  語句;
else 語句;
end if;


case(變數)
when 值1 then 語句1;
...
else 語句n;
end case;


case
when 表示式 then 語句1;
...
else 語句n;
end case;




b.迴圈語句 loop、while loop、for
loop
語句;
if(表示式) then
exit;
end if;
end loop; 


loop
語句;
exit when(表示式);
end loop;


while(表示式)loop
語句;
end loop; 


c.跳轉語句 goto 

eg:



3.異常 exception

1)編譯時出現的異常(無法處理)

2)執行時出現的異常(本文所講述的異常))
  系統異常:oracle已經處理的異常(有異常號)
      系統預定義異常:對應異常號有相應的異常名
      系統非預定義異常:只有異常號,沒有異常名  
系統預定義異常:
   no_data_found  too_many_rows
   dup_val_on_index zero_divide
    
begin
exception
when 預定義異常的名字 then
具體處理的語句
end


系統非預定義異常:

1)指導異常號

2)delare 
   異常名 exception; 
   pragma exception_init(異常變數,-異常號);

3)同預定異常處理過程


自定義異常:

declare
e exception;
begin
...
if 條件表示式 then
  1//  raise e;
  2//  raise_application_error(-異常號,異常的描述資訊);
end;
exception 
when e then
處理;
end;

使用者自定義異常:

根據使用者的實際需求規定為異常