Oracle基礎開發篇(4)

2021-09-01 09:30:45 字數 3943 閱讀 7330

儲存函式

儲存過程

觸發器oracle 預定義異常

pl/sql(procedure language/sql)是 oracle 對 sql 語言的過程化擴充套件,指在 sql 命令語言中增加了過程處理語句(如分支、迴圈等),使 sql 語言具有過程處理能力。把 sql 語言的資料操縱能力與過程語言的資料處理能力結合起來,使得 plsql 面向過程但比過程語言簡單、高效、靈活和實用。

[declare

--宣告變數

]begin

--**邏輯

[exception

--異常處理

]end;

變數名 型別(長度);
-- 方式一:直接賦值

變數名:=變數值;

-- 方式二:select ··· into ··· 賦值

select 列名1,··· into 變數名1,··· from 表名 where 條件

exception

when 異常型別 then

異常處理邏輯

if 條件 then

業務邏輯

elsif 條件 then

業務邏輯

else

業務邏輯

end if;

loop

--迴圈語句

end loop;

while 條件

loop

-- 迴圈語句

end loop;

for 變數 in 起始值..終止值

loop

-- 迴圈語句

end loop;

游標是系統為使用者開設的乙個資料緩衝區,存放 sql 語句的執行結果。 我們可以把游標理解為 pl/sql 中的結果集。

cursor 游標名稱 is sql 語句;

open 游標名稱

loop

fetch 游標名稱 into 變數

exit when 游標名稱%notfound

-- 迴圈語句

end loop;

close 游標名稱;

cursor 游標名稱(變數名 型別(長度)) is sql 語句(變數名);
declare cursor ······;    --定義游標

begin

for 變數 in 游標名(引數)

loop

-- 迴圈語句

end loop;

end ;

儲存函式又稱為自定義函式。可以接收乙個或多個引數,返回乙個結果。在函式中我們可以使用 p/sql 進行邏輯的處理。

create [ or replace ] function 函式名稱

(引數名稱 引數型別, 引數名稱 引數型別, ...)

return 結果變數資料型別

is 變數宣告部分;

begin

邏輯部分;

return 結果變數;

[exception 異常處理部分]

end;

儲存過程是被命名的 pl/sql 塊,儲存於資料庫中,是資料庫物件的一種。應用程式可以呼叫儲存過程,執行相應的邏輯。

儲存過程與儲存函式都可以封裝一定的業務邏輯並返回結果,存在區別如下:

儲存函式中有返回值,且必須返回;而儲存過程沒有返回值,可以通過傳出引數返回多個值。

儲存函式可以在 select 語句中直接使用,而儲存過程不能。過程多數是被應用程式所呼叫。

儲存函式一般都是封裝乙個查詢結果,而儲存過程一般都封裝一段事務**。

create [ or replace ] procedure 儲存過程名稱

(引數名 型別, 引數名 型別, 引數名 型別 ······)

is|as

變數宣告部分;

begin

邏輯部分

[exception 異常處理部分]

end;

注意:

引數只指定型別,不指定長度

過程引數的三種模式:

in 傳入引數(預設)

out 傳出引數 ,主要用於返回程式執行結果

in out 傳入傳出引數

call 儲存過程(引數 ······);
資料庫觸發器是乙個與表相關聯的、儲存的 pl/sql 程式。每當乙個特定的資料操作語句(insert,update,delete)在指定的表上發出時,oracle 自動地執行觸發器中定義的語句序列。

create [or replace] trigger 觸發器名

before | after

[delete ][[or] insert] [[or]update [of 列名]]

on 表名

[for each row ][when(條件) ]

declare

……begin

plsql 塊

end ;

-- for each row 作用是標註此觸發器是行級觸發器,不是語句級觸發器

命名的系統異常

產生原因

access_into_null

未定義物件

case_not_found

case 中若未包含相應的 when ,並且沒有設定 else 時

collection_is_null

集合元素未初始化

curser_already_open

游標已經開啟

dup_val_on_index

唯一索引對應的列上有重複的值

invalid_cursor

在不合法的游標上進行操作

invalid_number

內嵌的 sql 語句不能將字元轉換為數字

no_data_found

使用 select into 未返回行

too_many_rows

執行 select into 時,結果集超過一行

zero_divide

除數為 0

subscript_beyond_count

元素下標超過巢狀表或 varray 的最大值

subscript_outside_limit

使用巢狀表或 varray 時,將下標指定為負數

value_error

賦值時,變數長度不足以容納實際資料

login_denied

pl/sql 應用程式連線到 oracle 資料庫時,提供了不正確的使用者名稱或密碼

not_logged_on

pl/sql 應用程式在沒有連線 oralce 資料庫的情況下訪問資料

program_error

pl/sql 內部問題,可能需要重灌資料字典& pl./sql 系統包

rowtype_mismatch

宿主游標變數與 pl/sql 游標變數的返回型別不相容

self_is_null

使用物件型別時,在 null 物件上呼叫物件方法

storage_error

執行 pl/sql 時,超出記憶體空間

sys_invalid_id

無效的 rowid 字串

timeout_on_resource

oracle 在等待資源時超時

Oracle基礎開發篇(3)

操作檢視 物化檢視 序列同義詞 索引檢視是一種資料庫物件,是從乙個或者多個資料表或檢視中匯出的虛表,檢視所對應的資料並不真正地儲存在檢視中,而是儲存在所引用的資料表中,檢視的結構和資料是對資料表進行查詢的結果。根據建立檢視時給定的條件,檢視可以是乙個資料表的一部分,也可以是多個基表的聯合,它儲存了要...

我的oracle生涯 4 PLSQL基礎篇

主要檔案格式 包標頭檔案 包體檔案 包體檔案 declear 各種宣告 a b type a的屬性參照b的屬性 a b rowtype a的屬性參照b行屬性 begin 處理end 邏輯語句 條件if then elsif then else end if case a when a1 then w...

oracle基礎篇 下

11 說明 幾個高階查詢運算詞 a union 運算子 union 運算子通過組合其他兩個結果表 例如 table1 和 table2 並消去表中任何重複行而派生出乙個結果表。當 all 隨 union 一起使用時 即 union all 不消除重複行。兩種情況下,派生表的每一行不是來自 table...