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