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;
使用者自定義異常:
根據使用者的實際需求規定為異常