儲存函式
儲存過程
觸發器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...