有程序設(shè)計(jì)語(yǔ)言才能用于應(yīng)用軟件的開(kāi)發(fā)SQL語(yǔ)言
2021-07-31
1 SQL語(yǔ)言只是一種訪(fǎng)問(wèn)和操作數(shù)據(jù)庫(kù)的語(yǔ)言,不是具有過(guò)程控制的編程語(yǔ)言,只有一種編程語(yǔ)言才能用于應(yīng)用軟件的開(kāi)發(fā)。 PL SQL 是一種高級(jí)數(shù)據(jù)庫(kù)編程語(yǔ)言。該語(yǔ)言專(zhuān)門(mén)用于訪(fǎng)問(wèn)各種環(huán)境中的數(shù)據(jù)庫(kù)。由于該語(yǔ)言集成在數(shù)據(jù)庫(kù)服務(wù)器中,PL SQL 代碼可以快速高效地處理數(shù)據(jù)。此外,PL SQL 語(yǔ)言可以用于數(shù)據(jù)庫(kù)的一些客戶(hù)端工具也是該語(yǔ)言的一個(gè)特點(diǎn)。本章的主要內(nèi)容是討論介紹PL SQL語(yǔ)言的必要性和該語(yǔ)言的主要特點(diǎn),以及了解PL SQL語(yǔ)言的重要性和數(shù)據(jù)庫(kù)版本問(wèn)題。我還將在整本書(shū)中介紹一些更詳細(xì)的高級(jí)概念,在本章的最后,我們將解釋我們?cè)诒緯?shū)示例中使用的數(shù)據(jù)庫(kù)表的一些約定。 1和SQL1 1什么是PL SQL PL SQL PL SQL PL SQL是age的縮寫(xiě)。 SQL 是一種支持 ANSI 和標(biāo)準(zhǔn)的產(chǎn)品。
PL SQL 是 SQL 語(yǔ)言存儲(chǔ)過(guò)程語(yǔ)言的擴(kuò)展。從現(xiàn)在開(kāi)始,附上PL SQL。它現(xiàn)在已經(jīng)成為一種過(guò)程處理語(yǔ)言,簡(jiǎn)稱(chēng)為 PL SQL。當(dāng)前的 PL SQL 由兩部分組成。一部分是數(shù)據(jù)庫(kù)引擎部分,另一部分是獨(dú)立的引擎和sql訪(fǎng)問(wèn)的編程語(yǔ)言,可以嵌入到很多產(chǎn)品中和sql訪(fǎng)問(wèn)的編程語(yǔ)言,如C語(yǔ)言、JAVA語(yǔ)言等工具。這兩部分可以稱(chēng)為數(shù)據(jù)庫(kù)PL SQL和工具PL SQL。兩者的編程非常相似。都有程序結(jié)構(gòu)、語(yǔ)法和邏輯機(jī)制。 PL SQL 工具還添加了用于支持工具的語(yǔ)法,例如在表單上設(shè)置按鈕。本章主要介紹數(shù)據(jù)庫(kù)的內(nèi)容。 1 SQL 的優(yōu)點(diǎn)或特點(diǎn) 1 1 有利于客戶(hù)端-服務(wù)器環(huán)境的運(yùn)行 客戶(hù)端-服務(wù)器環(huán)境的真正瓶頸是網(wǎng)絡(luò)。無(wú)論網(wǎng)絡(luò)有多快,只要客戶(hù)端和服務(wù)器交換大量數(shù)據(jù)。應(yīng)用運(yùn)行的效率自然受到影響。如果使用PL SQL進(jìn)行編程,將這類(lèi)數(shù)據(jù)處理量大的應(yīng)用放到服務(wù)器端執(zhí)行。自然,它節(jié)省了互聯(lián)網(wǎng)上的數(shù)據(jù)傳輸時(shí)間。 1 2適用于客戶(hù)環(huán)境,因?yàn)樗譃閿?shù)據(jù)庫(kù)PL SQL部分和工具PL SQL。對(duì)于客戶(hù)端,PL SQL 可以嵌套到相應(yīng)的工具中??蛻?hù)端程序可以執(zhí)行本地PL SQL部分,也可以向服務(wù)發(fā)送SQL命令或激活服務(wù)器端PL SQL程序運(yùn)行。
1 3 是標(biāo)準(zhǔn) SQL 的過(guò)程擴(kuò)展,它不僅允許在 PL SQL 程序中嵌入 SQL 語(yǔ)句,還允許使用各種類(lèi)型的條件分支語(yǔ)句和循環(huán)語(yǔ)句。該解決方案可以在多個(gè)應(yīng)用程序之間共享。 . 14 模塊化程序結(jié)構(gòu)是一種高度描述性和定義明確的塊結(jié)構(gòu)。嵌套塊結(jié)構(gòu)分為獨(dú)立的過(guò)程、函數(shù)和觸發(fā)器,它們可以組合成一個(gè)包,以提高程序的模塊化。 15 運(yùn)行時(shí)錯(cuò)誤處理。使用提供的異常處理,開(kāi)發(fā)人員可以專(zhuān)注于處理各種錯(cuò)誤和PL SQL錯(cuò)誤,或者處理系統(tǒng)錯(cuò)誤和自定義錯(cuò)誤,以增強(qiáng)應(yīng)用程序的健壯性。 21 6提供大量?jī)?nèi)置程序包 提供大量?jī)?nèi)置程序包。 DBS 的一些低級(jí)操作和高級(jí)功能可以通過(guò)這些包來(lái)實(shí)現(xiàn),這對(duì) DBA 和應(yīng)用程序開(kāi)發(fā)人員都起著重要的作用。當(dāng)然,還有其他優(yōu)勢(shì),比如更好的性能、便攜性和兼容性、可維護(hù)性、易用性和速度。 1 SQL 可用語(yǔ)句 PL SQL 是系統(tǒng)的核心語(yǔ)言,現(xiàn)在很多組件都是用PL SQL 編寫(xiě)的。 PL SQL中可以使用SQL語(yǔ)句。
提醒在PL SQL中,只能使用語(yǔ)句的一部分。如果要在PL SQL中使用DDL、DDL、DDL、DDL等,只能動(dòng)態(tài)使用。在解釋 PL SQL 程序時(shí),PL SQL 組件還會(huì)檢查其中使用的表名、列名和數(shù)據(jù)類(lèi)型。 PL SQL 可以在 SQL PLUS 中使用。 PL SQL 可用于高級(jí)語(yǔ)言。 PL SQL可以用在其他開(kāi)發(fā)工具的開(kāi)發(fā)工具中,也可以調(diào)用寫(xiě)好的程序和函數(shù),比如可以調(diào)用服務(wù)器端的PL SQL程序等等。 1 4 運(yùn)行SQL 程序PL SQL 程序的運(yùn)行是通過(guò)一個(gè)引擎中的。該引擎可能位于應(yīng)用程序開(kāi)發(fā)的服務(wù)器端或客戶(hù)端。引擎執(zhí)行PL SQL中的過(guò)程語(yǔ)句,然后將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行。
結(jié)果返回到執(zhí)行端。 2 12 12 12 1PL SQL 塊 PL SQL 程序由三個(gè)塊組成,分別是聲明部分、執(zhí)行部分和異常處理部分。 PL SQL 塊的結(jié)構(gòu)如下。聲明部分在此聲明PL SQL 中使用的變量類(lèi)型和游標(biāo),以及本地存儲(chǔ)過(guò)程和函數(shù)。過(guò)程和語(yǔ)句的執(zhí)行部分是程序的主體部分。異常部分的執(zhí)行。錯(cuò)誤處理 3 執(zhí)行部分不能省略。 PL SQL 塊可以分為三類(lèi):未命名塊或匿名塊。動(dòng)態(tài)構(gòu)建。它們只能執(zhí)行一次。可以調(diào)用其他程序,但不能被其他程序調(diào)用。 2 命名塊是具有名稱(chēng)的匿名塊。名字就是標(biāo)簽。 3 存儲(chǔ)在數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程、函數(shù)等。
在數(shù)據(jù)庫(kù)上建立后,您可以在其他程序中調(diào)用它們。 4 觸發(fā)器 操作數(shù)據(jù)庫(kù)時(shí),會(huì)觸發(fā)一些事件,自動(dòng)執(zhí)行相應(yīng)的程序。 5 程序包 存儲(chǔ)在數(shù)據(jù)庫(kù)中的一組子程序和變量定義。包中的子程序可以被其他包或子程序調(diào)用。但是,如果聲明是局部子程序,則只能在定義局部子程序的塊中調(diào)用該局部子程序。 2 22 22 22 2PL SQL 結(jié)構(gòu) PL SQL 塊可以包含子塊。子塊可以位于 PL SQL 的任何部分,即 PL SQL 中的一個(gè)命令。 3232 32 3 標(biāo)識(shí)符。 PL SQL 編程中的標(biāo)識(shí)符定義和 SQL 標(biāo)識(shí)符定義的要求是一樣的。有要求和限制。標(biāo)識(shí)符名稱(chēng)不能超過(guò) 30 個(gè)字符。第一個(gè)字符必須是字母,不區(qū)分大小寫(xiě),并且不能使用。減號(hào)不能是 SQL 保留字。提示一般不要聲明變量名與表中的字段名完全相同。如果這樣做,您可能會(huì)得到不正確的結(jié)果。例如,下面的示例將刪除所有記錄而不是 END 的記錄。 PL SQL 中的變量命名有特殊建議。在系統(tǒng)設(shè)計(jì)階段,要求所有程序員遵守一定的要求,使整個(gè)系統(tǒng)的文檔符合規(guī)范中的要求。
以下是建議的命名方法 4 標(biāo)識(shí)符命名規(guī)則示例 程序變量 V 名稱(chēng) 程序常量 C 名稱(chēng) 光標(biāo)變量 Emp 異常標(biāo)識(shí)符 E 太多 表類(lèi)型 名稱(chēng)類(lèi)型 表名稱(chēng) 記錄類(lèi)型 名稱(chēng) 加替換變量 P sal 綁定變量 G 年 sal2 42 42 42 4PL SQL變量類(lèi)型在前面的介紹中,有系統(tǒng)數(shù)據(jù)類(lèi)型,也可以自定義數(shù)據(jù)類(lèi)型。下表列出了 PL SQL 中變量類(lèi)型的類(lèi)型和合法使用。 1 變量類(lèi)型可用于具有類(lèi)型子類(lèi)描述范圍限制的變量類(lèi)型固定長(zhǎng)度字符串國(guó)語(yǔ)字符集0 可選變量字符串國(guó)語(yǔ)字符集0 有符號(hào)整數(shù)是整數(shù)計(jì)算以?xún)?yōu)化性能。 Dec 小數(shù)的子類(lèi)型。高精度實(shí)數(shù)的子類(lèi)型。整數(shù)的子類(lèi)型。子類(lèi)型和等效項(xiàng)和等效項(xiàng)。小于 LONG 可變長(zhǎng)度字符串。 0 767 字節(jié) DATE 日期類(lèi)型 BC 從 4712 年 1 月 1 日到 4712 年 12 月 31 日, TRUE NULL 不使用通用行標(biāo)識(shí)符字符類(lèi)型來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)行號(hào)。示例1 插入一條記錄并顯示??趇d info DBMS PUT LINE row id DBMS PUT LINE info END 該子句用于檢索語(yǔ)句影響的數(shù)據(jù)行數(shù)。語(yǔ)句使用子句插入數(shù)據(jù)時(shí),子句還可以將列表達(dá)式和REF值返回給6個(gè)輸出變量。
使用子句時(shí),應(yīng)注意以下限制。當(dāng)通過(guò)視圖向基表插入數(shù)據(jù)時(shí),它只能用于單個(gè)基表視圖。示例2 修改一條記錄并顯示ptno ME 財(cái)務(wù)處id info DBMS PUT LINE row id DBMS PUT LINE info END 該子句用于檢索修改后的行的信息。當(dāng)語(yǔ)句修改單行數(shù)據(jù)時(shí),子句可以檢索修改行的和REF值以及行中修改列的列表達(dá)式,并將它們存儲(chǔ)在PL SQL變量或復(fù)合變量中。當(dāng)語(yǔ)句修改多行數(shù)據(jù)時(shí),子句可以將修改行的總和REF值和列表達(dá)式值返回到復(fù)合變量數(shù)組中。 in 子句的使用限制與語(yǔ)句中的子句限制相同。
示例3 刪除一條記錄并顯示 id info DBMS PUT LINE row id DBMS PUT LINE info END 7 該子句用于檢索已刪除行的信息。當(dāng)語(yǔ)句刪除單行數(shù)據(jù)時(shí),子句可以檢索已刪除行的總和。 REF 值和刪除列的列表達(dá)式可以存儲(chǔ)在 PL SQL 變量或復(fù)合變量中。當(dāng)語(yǔ)句刪除多行數(shù)據(jù)時(shí),子句可以將刪除的行和REF值以及列表達(dá)式值返回給復(fù)合變量。大批。 in 子句的使用限制與語(yǔ)句中的子句限制相同。 2 2 除了上面介紹的各種類(lèi)型,復(fù)合類(lèi)型還提供了一種類(lèi)型記錄稱(chēng)為復(fù)合類(lèi)型和表1記錄類(lèi)型。記錄類(lèi)型類(lèi)似于 C 語(yǔ)言中的結(jié)構(gòu)數(shù)據(jù)類(lèi)型。它分離邏輯相關(guān)和分離?;緮?shù)據(jù)類(lèi)型的變量作為一個(gè)整體存儲(chǔ)。它必須至少包含一個(gè)標(biāo)量或數(shù)據(jù)類(lèi)型成員。稱(chēng)為 PL 的域用于存儲(chǔ)不同但在邏輯上相關(guān)的信息。
使用記錄數(shù)據(jù)類(lèi)型變量時(shí),需要先在聲明部分定義記錄的組成和記錄的變量,然后在執(zhí)行部分引用記錄變量本身或其成員。記錄類(lèi)型語(yǔ)法定義如下: rd NULL NULL NULL NULL NULL NULL 4444 rec rec test rec test rec test rec rec book book book name book book Info talk PL SQL編程DBMS PUT LINE rec book PUT LINE rec book PUT LINE rec book PUT LINE rec book Name rec book Info rec book Info rec book Info rec book Info 8 可以使用語(yǔ)句給記錄變量賦值,只要記錄字段與查詢(xún)結(jié)果列表中的字段匹配即可。
示例 5555 定義了與 hr 表中這些列相同的記錄數(shù)據(jù)類(lèi)型。員工姓名姓名就業(yè)日期日期位置記錄類(lèi)型的變量只能保存從數(shù)據(jù)庫(kù)中查詢(xún)的一行記錄。如果查詢(xún)多行記錄,就會(huì)出錯(cuò)。 2 2 數(shù)組類(lèi)型數(shù)據(jù)是一組數(shù)據(jù)類(lèi)型相同的成員的集合。每個(gè)成員都有一個(gè)唯一的下標(biāo),該下標(biāo)取決于該成員在數(shù)組中的位置。在PL SQL中,數(shù)組數(shù)據(jù)類(lèi)型是。
定義數(shù)據(jù)類(lèi)型的語(yǔ)法如下。 size type name 是數(shù)據(jù)類(lèi)型的名稱(chēng)。 size為后面的整數(shù),表示可以容納的最大成員數(shù)。每個(gè)成員的數(shù)據(jù)類(lèi)型是類(lèi)型。默認(rèn)成員可以取一個(gè)空值,否則需要使用它來(lái)限制它。對(duì)于數(shù)據(jù)類(lèi)型,必須經(jīng)過(guò)三個(gè)步驟:定義、聲明和初始化。 9 示例 6666 定義一個(gè)數(shù)據(jù)類(lèi)型,最多保存 25 個(gè)數(shù)據(jù)類(lèi)型的 5 個(gè)成員 5555 聲明該數(shù)據(jù)類(lèi)型的變量 v reg TYPE 使用構(gòu)造函數(shù)語(yǔ)法分配初始值 v reg reg type 中國(guó)、美國(guó)、英國(guó)、日本、 , DBMS, PUT LINE, area name 4444 DBMS PUT LINE 將第5個(gè)成員的值賦給初始值NULL 5555 用構(gòu)造器語(yǔ)法賦初值后,可以給成員賦值 v reg 5555 DBMS PUT LINE 5555 END 3 使用 TYPE TYPE TYPE TYPE 定義變量。數(shù)據(jù)類(lèi)型與已定義的某個(gè)數(shù)據(jù)變量一致,尤其是表中某一列的數(shù)據(jù)類(lèi)型。這時(shí)候可以使用TYPE。
使用TYPE特性的好處是不需要知道被引用數(shù)據(jù)庫(kù)列的數(shù)據(jù)類(lèi)型,并且可以實(shí)時(shí)改變被引用數(shù)據(jù)庫(kù)列的數(shù)據(jù)類(lèi)型,容易保持一致性,并且不需要修改PL SQL程序。示例 7777 TYPE 定義匹配表的字段 TYPE 10T TYPE TYPE 聲明變量 v empT DBMS PUT LINE 接收數(shù)據(jù)的表的數(shù)據(jù)結(jié)構(gòu)是一致的。使用該特性的好處是不需要知道被引用數(shù)據(jù)庫(kù)中列的數(shù)量和數(shù)據(jù)類(lèi)型。被引用數(shù)據(jù)庫(kù)的列數(shù)和數(shù)據(jù)類(lèi)型可以實(shí)時(shí)更改,易于維護(hù)一致性,無(wú)需修改PL SQL程序。示例 9999