7.SQL的數(shù)據(jù)控制功能
SQL數(shù)據(jù)控制功能是指控制用戶對數(shù)據(jù)的存取權(quán)力。某個用戶對某類數(shù)據(jù)具有何種操作權(quán)力是由DBA決定的。這是個政策問題而不是技術(shù)問題。數(shù)據(jù)庫管理系統(tǒng)的功能是保證這些決定的執(zhí)行。為此它必須能:
(1)把授權(quán)的決定告知系統(tǒng),這是由SQL的gRANT和REVoKE語句來完成的。
(2)把授權(quán)的結(jié)果存入數(shù)據(jù)字典。
(3)當(dāng)用戶提出操作請求時,根據(jù)授權(quán)情況進(jìn)行檢查,以決定是執(zhí)行操作請求還是拒絕之。授權(quán)語句的一般格式為:
gRANT權(quán)力[,權(quán)力]…[oN對象類型對象名] To用戶[,用戶]…,
[wITH gRANT oPTIoN];
對不同類型的操作對象可有不同的操作權(quán)力。
(1)對基本表、視圖及其字段的操作權(quán)力有查詢、插入、更新、刪除以及它們的總和ALL PRIVILEgE。
(2)對基本表的操作權(quán)力還有修改(ALTER)和建立索引(INDEX)。
(3)對數(shù)據(jù)庫的操作權(quán)力有建立表(cREATETAB)。某用戶有了此權(quán)力就可以使用create table建立基本表。稱他為表的主人,擁有對此表的一切操作權(quán)力。
(4)對表空間的權(quán)力有使用(uSE)數(shù)據(jù)庫空間存儲基本表的權(quán)力。
(5)系統(tǒng)權(quán)力有建立新數(shù)據(jù)庫(cREATEDBA)的權(quán)力。gRANT語句中的任選項(xiàng)wITH gRANT oPTIoN的作用是使獲得某種權(quán)力的用戶可以把權(quán)力再授予別的用戶。
8.嵌入式SQL
把SQL嵌入主語言使用時必須解決三個問題:
(1)區(qū)分SQL語句與主語言語句。這是通過在所有的SQL語句前加前綴EXEc SQL來解決的。SQL語句結(jié)束標(biāo)志隨主語言不同而不同,如PL/1用分號(;),coBoL用EmD-EXEc來表示。SQL語句首先由預(yù)編譯程序加以處理,轉(zhuǎn)換為主語言編譯程序能夠識別的形式,然后交主語言編譯程序進(jìn)一步處理。
(2)數(shù)據(jù)庫工作單元和程序工作單元之間的通信。SQL語句中可以使用主語言的程序變量(簡稱主變量),這些變量名前加冒號(:)作標(biāo)志,以區(qū)別地字段名,程序中使用的任何表(基本表或視圖)都要用EXEc SQL DEcLARE語句加以說明。一則使程序更加清晰,二則使預(yù)編譯程序能作某些語法檢查。SQL語句執(zhí)行后,系統(tǒng)要反饋給應(yīng)用程序若干信息,這些信息送到SQL的通信區(qū)SQL cA。SQL cA用語句EXEc SQL INcLuDE加以定義。在SQL cA中有一個狀態(tài)指示字段SQL coDE。當(dāng)SQL coDE為零時,表示SQL語句執(zhí)行成功,否則返回一個錯誤代碼(負(fù)值)或警告信息(正值)。程序員應(yīng)該在每個SQL語句之后測試SQL coDE的值,以便處理各種情況。
(3)一個SQL語句原則上可產(chǎn)生或處理一組記錄,而主語言一次只能處理一個記錄,為此必須協(xié)調(diào)兩種處理方式。這是用游標(biāo)(cursor)來解決的。下面首先討論不需要游標(biāo)的DmL語句,然后討論使用游標(biāo)的DmL語句。
9.不用游標(biāo)的DmL語句
不需要游標(biāo)的DmL語句有:查詢結(jié)果為單記錄的SELEcT語句uPDATE(除了cuRRENT形式的uPDATE)語句DELETE(除了cuRRENT形式的DELETE)語句INSERT語句
(1)查詢結(jié)果為單記錄的SELEcT語句這類語句的一般格式是:(主語言為PL/1)EXEc SQL SELEcT目標(biāo)列INTo主變量[空值標(biāo)志]FRom基本表(或視圖)[wHERE條件表達(dá)式];SELEcT語句從數(shù)據(jù)庫中找到符合條件的記錄,把結(jié)果放到主變量中。
(2)uPDATE語句
(3)DELETE語句
(4)INSERT語句
10.使用游標(biāo)的DmL語句
一般情況下SELEcT語句的查詢結(jié)果是記錄的集合而不是單個記錄,為此需要用游標(biāo)機(jī)制作為橋梁,把集合操作轉(zhuǎn)換為單記錄處理。與游標(biāo)有關(guān)的語句有四個:
(1)定義游標(biāo)。游標(biāo)是與某一查詢結(jié)果相聯(lián)系的符號名。用DEcLARE語句定義。這是一個說明語句。與游標(biāo)相對應(yīng)的SELEcT語句這時并不執(zhí)行。
(2)打開(oPEN)游標(biāo)。打開游標(biāo)語句使游標(biāo)處于活動狀態(tài)。與游標(biāo)相應(yīng)的查詢語句被執(zhí)行。游標(biāo)指向查詢結(jié)果集中的第一個記錄之前。
(3)推進(jìn)(FETcH)游標(biāo)。把游標(biāo)向前推進(jìn)一個記錄,并把游標(biāo)指向的當(dāng)前記錄中的字段值取出,放到INTo子句后相應(yīng)的主變量中。FETcH語句常常用于循環(huán),以借助主語言功能逐一處理結(jié)果集中的數(shù)據(jù)。
(4)關(guān)閉(cLoSE)游標(biāo)。關(guān)閉游標(biāo),使它不再和原來的查詢結(jié)果相聯(lián)系。關(guān)閉了的游標(biāo)可以再次被打開,與新的查詢結(jié)果集相聯(lián)系。使用cuRRENT形式的uPDATE和刪除語句應(yīng)注意:
(1)若游標(biāo)定義中的SELEcT語句帶有uNIoN或oRDER BY子句,或者這個SELEcT語句相當(dāng)于定義了一個不可更新的視圖,則不能用這兩個更新語句。
(2)若使用cuRRENT形式的uPDATE語句,則游標(biāo)定義中要包括FoR uPDATE子句,指出更新的字段(SET子句中使用的字段)。因此,游標(biāo)定義語句的一般格式為:EXEc SQL DEcLARE游標(biāo)名cuRSoR FoR子查詢uNIoN子查詢…[FoR uPDATE oF字段名[,字段名]…|oRDER-BY-子句];
相關(guān)推薦:2010年9月計(jì)算機(jī)等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |