pl/sql是oracle對sql的過程化的擴充套件,pl/sql可以實現sql相關的過程化程式,並且能夠以儲存過程和函式的方式讓一段sql業務邏輯駐留在sql伺服器中,以便減少客戶機計算任務並減少網路i/o
(1)簡介
pl/sql程式設計框架為:
declare
list>
begin
exception
end
若是儲存過程或函式,首部換成create procedure/function ... is
(見後例)
先看乙個完整的pl/sql程式例子:
declare
name varchar2(20);
begin
select sname into name from student where s#='001'; dbms_output.put_line('學號001的學生姓名是:' || sname)
exception
when no_data_found then
dbms_output.put_line('學號為001的學生不存在');
when others then
dbms_output.put_line('發生了其它錯誤');
end;
其中:
(2)變數宣告
變數宣告分成普通宣告、表字段型別宣告和記錄型別宣告
普通宣告name varchar2(20);
等價於表字段型別宣告name student.sname%type
,後者利用了某錶的某字段的型別來宣告變數的型別
記錄型別相當於結構體,提高程式可讀性,如定義stu記錄型別:
type stu is
record (
s# varchar2(10),
name varchar2(20),
age number
);val stu;
引用時用點運算:val.name
(3)分支與迴圈
1.if分支
if
then
elseif
then
else
endif;
注意=
是相等,:=
是賦值
2.while迴圈
while
loop
endloop;
3.for迴圈
for
variable> in [reverse] .. loop
endloop;
4.loop迴圈
無條件的loop,必須在迴圈體內部加入退出語句exit;
或exit when
才能退出該迴圈
(4)異常處理
標準格式:
exception
when or then
...when others then
系統定義的exception_name包括:
pl/sql每次只能處理單個元組,為了使其和sql**多元組處理的特性保持一致,引入游標**
游標是客戶機上用來存放sql語句返回中間結果的一塊記憶體,目的是為了協調pl/sql和sql間資料處理數目的矛盾
(1)宣告與開啟關閉
pl/sql中游標只能儲存select
語句的中間結果,其宣告如下:
declare
cursor is
;
游標宣告時不會立即執行,需要顯式呼叫open
語句(對應關閉游標的close
語句):
begin
open
;
(2)迴圈讀取
游標中有一下幾個引數用於輔助控制游標讀取資料:
那麼利用fetch into
語句(返回一條元組)有一下兩種方式完成游標資料訪問:
1.while迴圈版本
begin
open ;
fetch into ;
while %found loop
dbms_output.put_line(...);
fetch into ;
end loop;
close ;
...2.for迴圈版本
begin
for in
loop
dbms_output.put_line(...);
end loop;
...
其中有:
(3)帶引數的游標
游標可以新增引數,如可以在引數中限定where
子句的條件:
cursor cs_s(val number(3)) is select * from stu where age = val;
一般匿名的pl/sql程式每次執行時都需要編譯,而命名pl/sql程式如儲存過程、函式和觸發器等則是編譯好駐留在資料庫中,可以隨時被sql或其他pl/sql程式呼叫
過程和匿名的pl/sql程式只是宣告格式上些許不同:
create [or replace] procedure
(in|out|in
out [:= ],
...)as|is
declaration>
begin
statement>
exception
handler>
end;
)
其中有:
觸發器是一類繫結在表上,由特定dml語句(update、insert、delete)觸發自動執行的一段pl/sql**儲存過程**,乙個錶能有多個觸發器但乙個觸發器只能繫結在乙個表上
觸發器的概念在先前的sql複習中已經詳細講解,這裡列出pl/sql中觸發器宣告規則:
create [or
replace] trigger
// 宣告觸發動作與觸發時間
before|after delect|insert|update [of
] // or 連線多個觸發動作時間宣告
*on// 不寫表示語句觸發,寫for
each
row表示行觸發
[for
each
row]
declare
...
資料庫 PL SQL(一)
1.pl sql簡介 pl sql也是一種程式語言,叫做過程化sql語言 procedural language sql pl sql是oracle資料庫對sql語句的擴充套件。在普通sql語句的使用上增加了程式語言的特點,所以pl sql就是把資料操作和查詢語句組織在pl sql 的過程性單元中,...
資料庫 pl sql基礎
1.語義 procedure language structure query language 2.基本語法 declare 區域性變數 資料型別 區域性變數 資料型別 預設值 區域性變數 資料型別 default 預設值 begion 執行語句 exception end 3.邏輯處理 if e...
PL SQL資料庫查詢
乙個完整的sql命令 select 和from是不可少的 select from where group by order by 3.1普通查詢 select 用於指定檢索資料庫的哪些列 from 用於指定從哪乙個表或檢視中檢索資料 select order no,contract where ro...