A. IF條件分支語(yǔ)法:
if (條件1) then
語(yǔ)句;
elsif (條件2) then
語(yǔ)句;
elsif (條件3) then
語(yǔ)句;
else
語(yǔ)句;
end if;
B . case條件分支:等值比較、條件比較、case表達(dá)式
a.等值比較語(yǔ)法:
CASE 條件判斷
WHEN 條件值的表達(dá)式 THEN 要執(zhí)行的條件操作 ;
…….
[ELSE ……..]
END CASE;
b. 條件比較語(yǔ)法:
CASE
WHEN 不同比較條件 THEN 要執(zhí)行的條件操作 ;
…….
[ELSE ……..]
END CASE;
2. 循環(huán)控制
A. 基本循環(huán):無(wú)論是否滿足條件,語(yǔ)句至少執(zhí)行一次
語(yǔ)法:LOOP
……..
EXIT [WHEN 條件語(yǔ)句];
END LOOP;
B. WHILE循環(huán):只有條件為真時(shí),才會(huì)執(zhí)行
語(yǔ)法: WHILE 條件語(yǔ)句 LOOP
…………………………………..
END LOOP;
C. FOR循環(huán)
語(yǔ)法: FOR 循環(huán)計(jì)數(shù)器 IN [REVERSE] 下限.. 上限 LOOP
……………………………………………………………………………………
END LOOP;
D. 嵌套循環(huán)和標(biāo)號(hào):定義標(biāo)號(hào):<< 標(biāo)號(hào)名稱(chēng) >>
3. 順序控制
A.GOTO語(yǔ)句:用于跳轉(zhuǎn)到指定<<標(biāo)號(hào)>>去執(zhí)行語(yǔ)句。缺點(diǎn)是會(huì)增加程序的復(fù)雜性,降低可讀性,所以Oracle建議晝不要使用。
B. NULL語(yǔ)句:空語(yǔ)句,執(zhí)行沒(méi)有任何實(shí)際效果,通常占位置用
4. 異常處理
A.異常有兩種類(lèi)型:
a. 預(yù)定義異常 : 當(dāng) PL/SQL 程序違反 Oracle 規(guī)則或超越系統(tǒng)限制時(shí)隱式引發(fā)
b. 用戶定義異常 : 用戶可以在 PL/SQL 塊的聲明部分定義異常,自定義的異常通過(guò) RAISE 語(yǔ)句顯式引發(fā)
B. 定義異常語(yǔ)法:異常名稱(chēng) EXCEPTION;
PRAGMA EXCEPTION_INIT(異常名稱(chēng), 錯(cuò)誤號(hào));
C. 拋出異常語(yǔ)法
a. RAISE 異常名稱(chēng);
b. RAISE_application_ERROR(錯(cuò)誤號(hào) , 錯(cuò)誤描述 [, {TRUE|FALSE}]);
D. 處理異常語(yǔ)法
EXCEPTION
WHEN ……. THEN
…………….
WHEN THEN
WHEN OTHERS THEN
………….
5. DML操作的游標(biāo)屬性
A. 隱式游標(biāo)
a. 名稱(chēng):SQL
b. 屬性:SQL%屬性名
c. 常見(jiàn)屬性
SQL%FOUND:操作到數(shù)據(jù)
SQL%NOTFOUND:沒(méi)有操作到數(shù)據(jù)
SQL%ROWCOUNT:操作的記錄數(shù)
B. DML語(yǔ)句的RETURNING字句:返回SQL執(zhí)行以后的結(jié)果
6. 用ForAll語(yǔ)句批量執(zhí)行DML
A. ForAll語(yǔ)句語(yǔ)法
ForAll 索引 in 開(kāi)始..結(jié)束
sql語(yǔ)句; --注意,只有一句!
B . 在INSERT語(yǔ)句上使用批量綁定:首先要給集合元素賦值,然后再使用ForAll語(yǔ)句批量綁定
C. ForAll的游標(biāo)屬性
a. SQL%FOUND:操作到數(shù)據(jù)
b. SQL%NOTFOUND:沒(méi)有操作到數(shù)據(jù)
c. SQL%ROWCOUNT:操作的記錄數(shù)
d. SQL%BULK_ROWCOUNT:返回批量執(zhí)行時(shí)第i個(gè)元素所作用的行數(shù)
7. PL/SQL中的數(shù)據(jù)庫(kù)事務(wù)管理
A. 事務(wù)概念:事務(wù)就是一個(gè)完整的邏輯工作單元,由多個(gè)操作組成。所有操作要么全部成功,要么全部失敗
B. 事務(wù)特點(diǎn): ACID:原子性、一致性、隔離性、(永)持久性
C. 事務(wù)控制流程
開(kāi)始事務(wù)
自動(dòng)執(zhí)行第一條SQL開(kāi)始
執(zhí)行SQL
可能執(zhí)行多條SQL
提交或回滾
commit或rollback
D. 鎖的概念:鎖是數(shù)據(jù)庫(kù)用來(lái)控制共享資源并發(fā)訪問(wèn)的機(jī)制、鎖用于保護(hù)正在被修改的數(shù)據(jù)、直到提交或回滾了事務(wù)之后,其他用戶才可以更新數(shù)據(jù)
E. 鎖的類(lèi)型:行級(jí)鎖、表級(jí)鎖
a.行級(jí)鎖:對(duì)正在被修改的行進(jìn)行鎖定。其他用戶可以訪問(wèn)除被鎖定的行以外的行
在使用以下語(yǔ)句時(shí),Oracle會(huì)自動(dòng)應(yīng)用行級(jí)鎖:
a. INSERT
b. UPDATE
c. DELETE
d. SELECT … FOR UPDATE
使用COMMIT或ROLLBACK語(yǔ)句釋放鎖
b. 表級(jí)鎖:鎖定整個(gè)表,限制其他用戶對(duì)表的訪問(wèn)
語(yǔ)法: LOCK TABLE table_name IN mode MODE;
F. 死鎖:當(dāng)兩個(gè)事務(wù)相互等待對(duì)方釋放資源時(shí),就會(huì)形成死鎖、Oracle會(huì)自動(dòng)檢測(cè)死鎖,并通過(guò)結(jié)束其中的一個(gè)事務(wù)來(lái)解決死鎖
8. 事務(wù)隔離級(jí)別
A. 分類(lèi)
a. 未提交讀
讀其它用戶沒(méi)有提交的數(shù)據(jù),又稱(chēng)臟讀
b.提交讀:Oracle支持,這也是默認(rèn)支持的級(jí)別(可能會(huì)發(fā)生不可重復(fù)讀數(shù)據(jù)異常)
c.可重復(fù)讀: Oracle不支持(可能會(huì)發(fā)生幻讀數(shù)據(jù)異常)
d.串行讀: Oracle支持,不過(guò)效率低
9. 數(shù)據(jù)庫(kù)事務(wù)實(shí)現(xiàn)機(jī)制:通過(guò)日志文件實(shí)現(xiàn)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注