資料庫複習10 PL SQL

2021-07-03 13:31:57 字數 3506 閱讀 7601

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...