PL/SQL基本文法要素

來源:互聯網
上載者:User
常量

    1. 定義常量的文法格式
    常量名 constant 類型標識符 [not null]:=值;
    常量,包括後面的變數名都必須以字母開頭,不能有空格,不能超過30個字元長度,同時不能和保留字同名,常(變)量名稱不區分大小寫,在字母后面可以帶數字或特殊字元。括弧內的not null為選擇性參數,若選用,表明該常(變)量不可為空值。
    2. 執行個體
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為pi的數字型常量,長度為9。
    執行結果如圖9.6所示。
    ―――――――――――――――――――――――――――――――――――――
    declare
        pi constant number(9):=3.1415926;
    begin
        commit;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\constantdefine.sql。

基礎資料型別 (Elementary Data Type)變數

    1. 基礎資料型別 (Elementary Data Type)
    PL/SQL中常用的基礎資料型別 (Elementary Data Type)如表9.2所示。
表9.2 常見的資料基本類型
類型標識符 說明
Number 數字型
Int 整數型
Pls_integer 整數型,產生溢出時出現錯誤
Binary_integer 整數型,表示帶符號的整數
Char 定長字元型,最大255個字元
Varchar2 變長字元型,最大2000個字元
Long 變長字元型,最長2GB
Date 日期型
Boolean 布爾型(TRUE、FALSE、NULL三者取一)

    在PL/SQL中使用的資料類型和Oracle資料庫中使用的資料類型,有的含義是完全一致的,有的是有不同的含義的。
    2. 基礎資料型別 (Elementary Data Type)變數的定義方法
    變數名 類型標識符 [not null]:=值;
    3. 執行個體
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為age的數字型變數,長度為3,初始值為26。執行結果如圖9.7所示。

    ―――――――――――――――――――――――――――――――――――――
    declare
        age number(3):=26;
    begin
        commit;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\basicdatatypedefine.sql。

複合資料型別變數

    下面介紹常見的幾種複合資料型別變數的定義。
    1. 使用%type定義變數
    為了讓PL/SQL中變數的類型和資料表中的欄位的資料類型一致,Oracle 9i提供了%type定義方法。這樣當資料表的欄位類型修改後,PL/SQL程式中相應變數的類型也自動修改。
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為mydate的變數,其類型和tempuser.testtable資料表中的currentdate欄位類型是一致的。
    執行結果如圖9.8所示。
    ―――――――――――――――――――――――――――――――――――――
    Declare
        mydate tempuser.testtable.currentdate%type;
    begin
        commit;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\typedefine.sql。

    2. 定義記錄類型變數
    很多結構化程式設計語言都提供了記錄類型的資料類型,在PL/SQL中,也支援將多個基礎資料型別 (Elementary Data Type)捆綁在一起的記錄資料類型。
    下面的程式碼定義了名為myrecord的記錄類型,該記錄類型由整數型的myrecordnumber和日期型的mycurrentdate基本類型變數組成,srecord是該類型的變數,引用記錄型變數的方法是“記錄變數名.基本類型變數名”。
    程式的執行部分從tempuser.testtable資料表中提取recordnumber欄位為68的記錄的內容,存放在srecord複合變數裡,然後輸出srecord.mycurrentdate的值,實際上就是資料表中相應記錄的currentdate的值。
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,執行結果如圖9.9所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        type myrecord is record(
           myrecordnumber int,
           mycurrentdate date);
        srecord myrecord;
    begin
        select * into srecord from tempuser.testtable where recordnumber=68;
        dbms_output.put_line(srecord.mycurrentdate);
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\ recordtypedefine.sql。
    在PL/SQL程式中,select語句總是和into配合使用,into子句後面就是要被賦值的變數。

    3. 使用%rowtype定義變數
    使用%type可以使變數獲得欄位的資料類型,使用%rowtype可以使變數獲得整個記錄的資料類型。比較兩者定義的不同:變數名 資料表.列名%type,變數名 資料表%rowtype。
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為mytable的複合類型變數,與testtable資料表結構相同,執行結果如圖9.10所示。
    ―――――――――――――――――――――――――――――――――――――
    Declare
        mytable testtable%rowtype;
    begin
       select * into mytable
       from tempuser.testtable
       where recordnumber=88;
       dbms_output.put_line(mytable.currentdate);
    end;
    ―――――――――――――――――――――――――――――――――――――

    【配套程式位置】:第9章\ rowtypedefine.sql。
    4. 定義一維表類型變數
    表類型變數和資料表是有區別的,定義表類型變數的文法如下:
    ―――――――――――――――――――――――――――――――――――――
    type 表類型 is table of 類型 index by binary_integer;
    表變數名 表類型;
    ―――――――――――――――――――――――――――――――――――――
    類型可以是前面的類型定義,index by binary_integer子句代表以符號整數為索引,這樣訪問表類型變數中的資料方法就是“表變數名(索引符號整數)”。
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為tabletype1和tabletype2的兩個一維表類型,相當於一維數組。table1和table2分別是兩種表類型變數。
    執行結果如圖9.11所示。
    ―――――――――――――――――――――――――――――――――――――
    Declare
       type tabletype1 is table of varchar2(4) index by binary_integer;
       type tabletype2 is table of tempuser.testtable.recordnumber%type index by binary_integer;
    table1 tabletype1;
    table2 tabletype2;
    begin
       table1(1):='大學';
       table1(2):='大專';
       table2(1):=88;
       table2(2):=55;
       dbms_output.put_line(table1(1)||table2(1));
       dbms_output.put_line(table1(2)||table2(2));
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\ tabletypedefine1.sql。

    “||”是連接字串的運算子。
    5. 定義多維表類型變數
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為tabletype1的多維表類型,相當於多維陣列,table1是多維表類型變數,將資料表tempuser.testtable中recordnumber為60的記錄提取出來存放在table1中並顯示。執行結果如圖9.12所示。
    ―――――――――――――――――――――――――――――――――――――
    Declare
      type tabletype1 is table of testtable%rowtype index by binary_integer;
      table1 tabletype1;
    begin
       select * into table1(60)
       from tempuser.testtable
       where recordnumber=60;
       dbms_output.put_line(table1(60).recordnumber||table1(60).currentdate);
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\ tabletypedefine2.sql。

    在定義好的表類型變數裡,可以使用count、delete、first、last、next、exists和prior等屬性進行操作,使用方法為“表變數名.屬性”,返回的是數字。
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為tabletype1的一維表類型,table1是一維表類型變數,變數中插入3個資料,綜合使用了表變數屬性。
    執行結果如圖9.13所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    Declare
        type tabletype1 is table of varchar2(9) index by binary_integer;
    table1 tabletype1;
    begin
        table1(1):='成都市';
        table1(2):='北京市';
        table1(3):='青島市';
        dbms_output.put_line('總記錄數:'||to_char(table1.count));
        dbms_output.put_line('第一條記錄:'||table1.first);
        dbms_output.put_line('最後條記錄:'||table1.last);
        dbms_output.put_line('第二條的前一條記錄:'||table1.prior(2));
        dbms_output.put_line('第二條的後一條記錄:'||table1.next(2));
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\ tabletypedefine3.sql。


運算式

    變數、常量經常需要組成各種運算式來進行運算,下面介紹在PL/SQL中常見運算式的運算規則。
    1. 數值運算式
    PL/SQL程式中的數值運算式是由數值型常數、變數、函數和算術運算子組成的,可以使用的算術運算子包括+(加法)、-(減法)、*(乘法)、/(除法)和**(乘方)等。
    在【SQLPlus Worksheet】中執行下列PL/SQL程式,該程式定義了名為result的整數型變數,計算的是10+3*4-20+5**2的值,理論結果應該是27。執行結果如圖9.14所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    Declare
       result integer;
    begin
       result:=10+3*4-20+5**2;
       dbms_output.put_line('運算結果是:'||to_char(result));
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\ datacompute.sql。

    dbms_output.put_line函數輸出只能是字串,因此利用to_char函數將數值型結果轉換為字元型。
    2. 字元運算式
    字元運算式由字元型常數、變數、函數和字元運算子組成,唯一可以使用的字元運算子就是串連運算子“||”。
    3. 關聯運算式
    關聯運算式由字元運算式或數值運算式與關係運算子組成,可以使用的關係運算子包括以下9種。
    < 小於
    > 大於
    = 等於(不是賦值運算子:=)
    like 類似於
    in 在……之中
    <= 小於等於
    >= 大於等於
    != 不等於
    between 在……之間
    關係型運算式運算子兩邊的運算式的資料類型必須一致。
    4. 邏輯運算式
    邏輯運算式由邏輯常數、變數、函數和邏輯運算子組成,常見的邏輯運算子包括以下3種。
    NOT:邏輯非
    OR:邏輯或
    AND:邏輯與
    運算的優先次序為NOT、AND和OR。

函數

    PL/SQL程式中提供了很多函數供擴充功能,除了標準SQL語言的函數可以使用外,最常見的資料類型轉換函式有以下3個。
    To_char:將其他類型資料轉換為字元型。
    To_date:將其他類型資料轉換為日期型。
    To_number:將其他類型資料轉換為數值型。
    以上介紹了PL/SQL中最基本的文法要素,下面介紹體現PL/SQL過程化編程思想的流程式控制制語句。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。