濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Oracle PL/SQL語(yǔ)言入門基礎(chǔ)

Oracle PL/SQL語(yǔ)言入門基礎(chǔ)

熱門標(biāo)簽:百變地圖標(biāo)注 廣州市400電話辦理 宜賓外呼系統(tǒng)廠家 語(yǔ)音電話機(jī)器人營(yíng)銷方案 地圖標(biāo)注原件 南通防封外呼系統(tǒng)運(yùn)營(yíng)商 修改高德地圖標(biāo)注 淮安自動(dòng)外呼系統(tǒng)開(kāi)發(fā) 語(yǔ)音電話機(jī)器人缺點(diǎn)
正在看的ORACLE教程是:Oracle PL/SQL語(yǔ)言入門基礎(chǔ)。

PL/SQL是ORACLE對(duì)標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)語(yǔ)言的擴(kuò)展,ORACLE公司已經(jīng)將PL/SQL整合到ORACLE 服務(wù)器和其他工具中了,近幾年中更多的開(kāi)發(fā)人員和DBA開(kāi)始使用PL/SQL,本文將講述PL/SQL基礎(chǔ)語(yǔ)法,結(jié)構(gòu)和組件、以及如何設(shè)計(jì)并執(zhí)行一個(gè)PL/SQL程序。

  PL/SQL的優(yōu)點(diǎn)

  從版本6開(kāi)始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的優(yōu)點(diǎn)以及其獨(dú)有的數(shù)據(jù)管理的便利性,那么你很難想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一個(gè)獨(dú)立的產(chǎn)品,他是一個(gè)整合到ORACLE服務(wù)器和ORACLE工具中的技術(shù),可以把PL/SQL看作ORACLE服務(wù)器內(nèi)的一個(gè)引擎,sql語(yǔ)句執(zhí)行者處理單個(gè)的sql語(yǔ)句,PL/SQL引擎處理PL/SQL程序塊。當(dāng)PL/SQL程序塊在PL/SQL引擎處理時(shí),ORACLE服務(wù)器中的SQL語(yǔ)句執(zhí)行器處理pl/sql程序塊中的SQL語(yǔ)句。

  PL/SQL的優(yōu)點(diǎn)如下:

  . PL/SQL是一種高性能的基于事務(wù)處理的語(yǔ)言,能運(yùn)行在任何ORACLE環(huán)境中,支持所有數(shù)據(jù)處理命令。通過(guò)使用PL/SQL程序單元處理SQL的數(shù)據(jù)定義和數(shù)據(jù)控制元素。

  . PL/SQL支持所有SQL數(shù)據(jù)類型和所有SQL函數(shù),同時(shí)支持所有ORACLE對(duì)象類型

  . PL/SQL塊可以被命名和存儲(chǔ)在ORACLE服務(wù)器中,同時(shí)也能被其他的PL/SQL程序或SQL命令調(diào)用,任何客戶/服務(wù)器工具都能訪問(wèn)PL/SQL程序,具有很好的可重用性。

  . 可以使用ORACLE數(shù)據(jù)工具管理存儲(chǔ)在服務(wù)器中的PL/SQL程序的安全性??梢允跈?quán)或撤銷數(shù)據(jù)庫(kù)其他用戶訪問(wèn)PL/SQL程序的能力。

  . PL/SQL代碼可以使用任何ASCII文本編輯器編寫,所以對(duì)任何ORACLE能夠運(yùn)行的操作系統(tǒng)都是非常便利的

  . 對(duì)于SQL,ORACLE必須在同一時(shí)間處理每一條SQL語(yǔ)句,在網(wǎng)絡(luò)環(huán)境下這就意味作每一個(gè)獨(dú)立的調(diào)用都必須被oracle服務(wù)器處理,這就占用大量的服務(wù)器時(shí)間,同時(shí)導(dǎo)致網(wǎng)絡(luò)擁擠。而PL/SQL是以整個(gè)語(yǔ)句塊發(fā)給服務(wù)器,這就降低了網(wǎng)絡(luò)擁擠。

  PL/SQL塊結(jié)構(gòu)

  PL/SQL是一種塊結(jié)構(gòu)的語(yǔ)言,組成PL/SQL程序的單元是邏輯塊,一個(gè)PL/SQL 程序包含了一個(gè)或多個(gè)邏輯塊,每個(gè)塊都可以劃分為三個(gè)部分。與其他語(yǔ)言相同,變量在使用之前必須聲明,PL/SQL提供了獨(dú)立的專門用于處理異常的部分,下面描述了PL/SQL塊的不同部分:

  聲明部分(Declaration section)

  聲明部分包含了變量和常量的數(shù)據(jù)類型和初始值。這個(gè)部分是由關(guān)鍵字DECLARE開(kāi)始,如果不需要聲明變量或常量,那么可以忽略這一部分;需要說(shuō)明的是游標(biāo)的聲明也在這一部分。

  執(zhí)行部分(Executable section)

  執(zhí)行部分是PL/SQL塊中的指令部分,由關(guān)鍵字BEGIN開(kāi)始,所有的可執(zhí)行語(yǔ)句都放在這一部分,其他的PL/SQL塊也可以放在這一部分。

  異常處理部分(Exception section)

  這一部分是可選的,在這一部分中處理異?;蝈e(cuò)誤,對(duì)異常處理的詳細(xì)討論我們?cè)诤竺孢M(jìn)行。

  PL/SQL塊語(yǔ)法


  PL/SQL塊中的每一條語(yǔ)句都必須以分號(hào)結(jié)束,SQL語(yǔ)句可以使多行的,但分號(hào)表示該語(yǔ)句的結(jié)束。一行中可以有多條SQL語(yǔ)句,他們之間以分號(hào)分隔。每一個(gè)PL/SQL塊由BEGIN或DECLARE開(kāi)始,以END結(jié)束。注釋由--標(biāo)示。

  PL/SQL塊的命名和匿名

  PL/SQL程序塊可以是一個(gè)命名的程序塊也可以是一個(gè)匿名程序塊。匿名程序塊可以用在服務(wù)器端也可以用在客戶端。

  命名程序塊可以出現(xiàn)在其他PL/SQL程序塊的聲明部分,這方面比較明顯的是子程序,子程序可以在執(zhí)行部分引用,也可以在異常處理部分引用。

  PL/SQL程序塊可背獨(dú)立編譯并存儲(chǔ)在數(shù)據(jù)庫(kù)中,任何與數(shù)據(jù)庫(kù)相連接的應(yīng)用程序都可以訪問(wèn)這些存儲(chǔ)的PL/SQL程序塊。ORACLE提供了四種類型的可存儲(chǔ)的程序:

   . 函數(shù)

   . 過(guò)程

   . 包

   . 觸發(fā)器

  函數(shù)

  函數(shù)是命名了的、存儲(chǔ)在數(shù)據(jù)庫(kù)中的PL/SQL程序塊。函數(shù)接受零個(gè)或多個(gè)輸入?yún)?shù),有一個(gè)返回值,返回值的數(shù)據(jù)類型在創(chuàng)建函數(shù)時(shí)定義。定義函數(shù)的語(yǔ)法如下:


  過(guò)程

  存儲(chǔ)過(guò)程是一個(gè)PL/SQL程序塊,接受零個(gè)或多個(gè)參數(shù)作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函數(shù)不同,存儲(chǔ)過(guò)程沒(méi)有返回值,存儲(chǔ)過(guò)程不能由SQL語(yǔ)句直接使用,只能通過(guò)EXECUT命令或PL/SQL程序塊內(nèi)部調(diào)用,定義存儲(chǔ)過(guò)程的語(yǔ)法如下:


  包(package)

  包其實(shí)就是被組合在一起的相關(guān)對(duì)象的集合,當(dāng)包中任何函數(shù)或存儲(chǔ)過(guò)程被調(diào)用,包就被加載入內(nèi)存中,包中的任何函數(shù)或存儲(chǔ)過(guò)程的子程序訪問(wèn)速度將大大加快。
包由兩個(gè)部分組成:規(guī)范和包主體(body),規(guī)范描述變量、常量、游標(biāo)、和子程序,包體完全定義子程序和游標(biāo)。

  觸發(fā)器(trigger)

  觸發(fā)器與一個(gè)表或數(shù)據(jù)庫(kù)事件聯(lián)系在一起的,當(dāng)一個(gè)觸發(fā)器事件發(fā)生時(shí),定義在表上的觸發(fā)器被觸發(fā)。

[NextPage]

 變量和常量

  變量存放在內(nèi)存中以獲得值,能被PL/SQL塊引用。你可以把變量想象成一個(gè)可儲(chǔ)藏東西的容器,容器內(nèi)的東西是可以改變的。

  聲明變量

  變量一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強(qiáng)壯的類型語(yǔ)言,這就是說(shuō)在引用變量前必須首先聲明,要在執(zhí)行或異常處理部分使用變量,那么變量必須首先在聲明部分進(jìn)行聲明。

  聲明變量的語(yǔ)法如下:


  注意:可以在聲明變量的同時(shí)給變量強(qiáng)制性的加上NOT NULL約束條件,此時(shí)變量在初始化時(shí)必須賦值。

  給變量賦值

  給變量賦值有兩種方式:

  . 直接給變量賦值

   X:=200;
   Y=Y+(X*20);

  . 通過(guò)SQL SELECT INTO 或FETCH INTO給變量賦值

SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;

  常量

  常量與變量相似,但常量的值在程序內(nèi)部不能改變,常量的值在定義時(shí)賦予,,他的聲明方式與變量相似,但必須包括關(guān)鍵字CONSTANT。常量和變量都可被定義為SQL和用戶定義的數(shù)據(jù)類型。


  這個(gè)語(yǔ)句定了一個(gè)名叫ZERO_VALUE、數(shù)據(jù)類型是NUMBER、值為0的常量。

  標(biāo)量(scalar)數(shù)據(jù)類型

  標(biāo)量(scalar)數(shù)據(jù)類型沒(méi)有內(nèi)部組件,他們大致可分為以下四類:

   . number
   . character
   . date/time
   . boolean

  表1顯示了數(shù)字?jǐn)?shù)據(jù)類型;表2顯示了字符數(shù)據(jù)類型;表3顯示了日期和布爾數(shù)據(jù)類型。

  表1 Scalar Types:Numeric

  表2 字符數(shù)據(jù)類型 

  表3 DATE和BOOLEAN

  LOB數(shù)據(jù)類型

  LOB(大對(duì)象,Large object) 數(shù)據(jù)類型用于存儲(chǔ)類似圖像,聲音這樣的大型數(shù)據(jù)對(duì)象,LOB數(shù)據(jù)對(duì)象可以是二進(jìn)制數(shù)據(jù)也可以是字符數(shù)據(jù),其最大長(zhǎng)度不超過(guò)4G。LOB數(shù)據(jù)類型支持任意訪問(wèn)方式,LONG只支持順序訪問(wèn)方式。LOB存儲(chǔ)在一個(gè)單獨(dú)的位置上,同時(shí)一個(gè)"LOB定位符"(LOB locator)存儲(chǔ)在原始的表中,該定位符是一個(gè)指向?qū)嶋H數(shù)據(jù)的指針。在PL/SQL中操作LOB數(shù)據(jù)對(duì)象使用ORACLE提供的包DBMS_LOB.LOB數(shù)據(jù)類型可分為以下四類:

  . BFILE
  . BLOB
  . CLOB

[1] [2] 下一頁(yè)

正在看的ORACLE教程是:Oracle PL/SQL語(yǔ)言入門基礎(chǔ)。  . NCLOB

  操作符

  與其他程序設(shè)計(jì)語(yǔ)言相同,PL/SQL有一系列操作符。操作符分為下面幾類:

  . 算術(shù)操作符

  . 關(guān)系操作符

  . 比較操作符

  . 邏輯操作符

  算術(shù)操作符如表4所示


  關(guān)系操作符主要用于條件判斷語(yǔ)句或用于where子串中,關(guān)系操作符檢查條件和結(jié)果是否為true或false,表5是PL/SQL中的關(guān)系操作符


  表6 顯示的是比較操作符

  表7.8顯示的是邏輯操作符

  執(zhí)行部分

  執(zhí)行部分包含了所有的語(yǔ)句和表達(dá)式,執(zhí)行部分以關(guān)鍵字BEGIN開(kāi)始,以關(guān)鍵字EXCEPTION結(jié)束,如果EXCEPTION不存在,那么將以關(guān)鍵字END結(jié)束。分號(hào)分隔每一條語(yǔ)句,使用賦值操作符:=或SELECT INTO或FETCH INTO給每個(gè)變量賦值,執(zhí)行部分的錯(cuò)誤將在異常處理部分解決,在執(zhí)行部分中可以使用另一個(gè)PL/SQL程序塊,這種程序塊被稱為嵌套塊

  所有的SQL數(shù)據(jù)操作語(yǔ)句都可以用于執(zhí)行部分,PL/SQL塊不能再屏幕上顯示SELECT語(yǔ)句的輸出。SELECT語(yǔ)句必須包括一個(gè)INTO子串或者是游標(biāo)的一部分,執(zhí)行部分使用的變量和常量必須首先在聲明部分聲明,執(zhí)行部分必須至少包括一條可執(zhí)行語(yǔ)句,NULL是一條合法的可執(zhí)行語(yǔ)句,事物控制語(yǔ)句COMMIT和ROLLBACK可以在執(zhí)行部分使用,數(shù)據(jù)定義語(yǔ)言(Data Definition language)不能在執(zhí)行部分中使用,DDL語(yǔ)句與EXECUTE IMMEDIATE一起使用或者是DBMS_SQL調(diào)用。

  執(zhí)行一個(gè)PL/SQL塊

  SQL*PLUS中匿名的PL/SQL塊的執(zhí)行是在PL/SQL塊后輸入/來(lái)執(zhí)行,如下面的例子所示:


  命名的程序與匿名程序的執(zhí)行不同,執(zhí)行命名的程序塊必須使用execute關(guān)鍵字:



  如果在另一個(gè)命名程序塊或匿名程序塊中執(zhí)行這個(gè)程序,那么就不需要EXECUTE關(guān)進(jìn)字。

[NextPage]

控制結(jié)構(gòu)

  控制結(jié)構(gòu)控制PL/SQL程序流程的代碼行,PL/SQL支持條件控制和循環(huán)控制結(jié)構(gòu)。

  語(yǔ)法和用途

   IF..THEN

  語(yǔ)法:


  IF語(yǔ)句判斷條件condition是否為TRUE,如果是,則執(zhí)行THEN后面的語(yǔ)句,如果condition為false或NULL則跳過(guò)THEN到END IF之間的語(yǔ)句,執(zhí)行END IF后面的語(yǔ)句。

  IF..THEN...ELSE

  語(yǔ)法:


  如果條件condition為TRUE,則執(zhí)行THEN到ELSE之間的語(yǔ)句,否則執(zhí)行ELSE到END IF之間的語(yǔ)句。

  IF 可以嵌套,可以在IF 或IF ..ELSE語(yǔ)句中使用IF或IF..ELSE語(yǔ)句。


  IF..THEN..ELSIF

  語(yǔ)法:


  如果條件condition1為TRUE則執(zhí)行statement1,然后執(zhí)行statement5,否則判斷condition2是否為TRUE,若為TRUE則執(zhí)行statement2,然后執(zhí)行statement5,對(duì)于condition3也是相同的,如果condition1,condition2,condition3都不成立,那么將執(zhí)行statement4,然后執(zhí)行statement5。

  循環(huán)控制

  循環(huán)控制的基本形式是LOOP語(yǔ)句,LOOP和END LOOP之間的語(yǔ)句將無(wú)限次的執(zhí)行。LOOP語(yǔ)句的語(yǔ)法如下:

  LOOP 
   statements;
  END LOOP

  LOOP和END LOOP之間的語(yǔ)句無(wú)限次的執(zhí)行顯然是不行的,那么在使用LOOP語(yǔ)句時(shí)必須使用EXIT語(yǔ)句,強(qiáng)制循環(huán)結(jié)束,例如:


  此時(shí)Y的值是1010.

  EXIT WHEN語(yǔ)句將結(jié)束循環(huán),如果條件為TRUE,則結(jié)束循環(huán)。


  WHILE..LOOP

  WHILE..LOOP有一個(gè)條件與循環(huán)相聯(lián)系,如果條件為TRUE,則執(zhí)行循環(huán)體內(nèi)的語(yǔ)句,如果結(jié)果為FALSE,則結(jié)束循環(huán)。


  FOR...LOOP

  語(yǔ)法:


  LOOP和WHILE循環(huán)的循環(huán)次數(shù)都是不確定的,F(xiàn)OR循環(huán)的循環(huán)次數(shù)是固定的,counter是一個(gè)隱式聲明的變量,他的初始值是start_range,第二個(gè)值是start_range+1,直到end_range,如果start_range等于end _range,那么循環(huán)將執(zhí)行一次。如果使用了REVERSE關(guān)鍵字,那么范圍將是一個(gè)降序。


  如果要退出for循環(huán)可以使用EXIT語(yǔ)句。

  標(biāo)簽

  用戶可以使用標(biāo)簽使程序獲得更好的可讀性。程序塊或循環(huán)都可以被標(biāo)記。標(biāo)簽的形式是>。

  標(biāo)記程序塊


  標(biāo)記循環(huán)


  GOTO語(yǔ)句

  語(yǔ)法:

  GOTO LABEL;

  執(zhí)行GOTO語(yǔ)句時(shí),控制會(huì)立即轉(zhuǎn)到由標(biāo)簽標(biāo)記的語(yǔ)句。PL/SQL中對(duì)GOTO語(yǔ)句有一些限制,對(duì)于塊、循環(huán)、IF語(yǔ)句而言,從外層跳轉(zhuǎn)到內(nèi)層是非法的。


  注意:NULL是一個(gè)合法的可執(zhí)行語(yǔ)句。

  嵌套

  程序塊的內(nèi)部可以有另一個(gè)程序塊這種情況稱為嵌套。嵌套要注意的是變量,定義在最外部程序塊中的變量可以在所有子塊中使用,如果在子塊中定義了與外部程序塊變量相同的變量名,在執(zhí)行子塊時(shí)將使用子塊中定義的變量。子塊中定義的變量不能被父塊引用。同樣GOTO語(yǔ)句不能由父塊跳轉(zhuǎn)道子塊中,反之則是合法的。


  小結(jié)

  我們?cè)谶@篇文章中介紹了PL/SQL的基礎(chǔ)語(yǔ)法以及如何使用PL/SQL語(yǔ)言設(shè)計(jì)和運(yùn)行PL/SQL程序塊,并將PL/SQL程序整合到Oracle服務(wù)器中,雖然PL/SQL程序作為功能塊嵌入Oracle數(shù)據(jù)庫(kù)中,但PL/SQL與ORACLE數(shù)據(jù)庫(kù)的緊密結(jié)合使得越來(lái)越多的Oracle數(shù)據(jù)庫(kù)管理員和開(kāi)發(fā)人員開(kāi)始使用PL/SQL。

上一頁(yè)     

上一頁(yè)  [1] [2] 

您可能感興趣的文章:
  • oracle復(fù)習(xí)筆記之PL/SQL程序所要了解的知識(shí)點(diǎn)
  • PL/SQL Dev連接Oracle彈出空白提示框的解決方法分享
  • 64位win7下pl/sql無(wú)法連接oracle解決方法
  • Oracle中PL/SQL中if語(yǔ)句的寫法介紹
  • Oracle中在pl/sql developer修改表的2種方法
  • ORACLE PL/SQL 觸發(fā)器編程篇介紹
  • Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)
  • 在Oracle PL/SQL中游標(biāo)聲明中表名動(dòng)態(tài)變化的方法
  • PL/SQL實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)任務(wù)調(diào)度
  • Oracle PL/SQL入門案例實(shí)踐
  • Oracle PL/SQL入門慨述
  • Oracle教程之pl/sql簡(jiǎn)介

標(biāo)簽:池州 通化 襄陽(yáng) 嘉峪關(guān) 南平 南平 聊城 股票投資

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle PL/SQL語(yǔ)言入門基礎(chǔ)》,本文關(guān)鍵詞  Oracle,SQL,語(yǔ)言,入門,基礎(chǔ),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle PL/SQL語(yǔ)言入門基礎(chǔ)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Oracle PL/SQL語(yǔ)言入門基礎(chǔ)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    东丽区| 樟树市| 双鸭山市| 都匀市| 青田县| 兴化市| 福州市| 南汇区| 教育| 板桥市| 乃东县| 漳浦县| 宣武区| 和平县| 卢湾区| 赤水市| 潞城市| 商洛市| 临湘市| 温泉县| 和顺县| 泸州市| 定结县| 明水县| 樟树市| 称多县| 张家川| 北票市| 昭通市| 腾冲县| 股票| 咸阳市| 昌江| 宜宾市| 安岳县| 临朐县| 怀仁县| 娄底市| 河曲县| 庆云县| 丹棱县|