PL/SQL基本語法要素

           

          常量

              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。

          基本數據類型變量

              1. 基本數據類型
              PL/SQL中常用的基本數據類型如表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. 基本數據類型變量的定義方法
              變量名 類型標識符 [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中,也支持將多個基本數據類型捆綁在一起的記錄數據類型。
              下面的程序代碼定義了名為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過程化編程思想的流程控制語句。

           

          posted on 2005-11-05 13:26 大樹 閱讀(237) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          本期話題
          能源行業資產管理咨詢
          資產管理信息化方案提供
          資產管理相關行業培訓
          大型企業軟件體系架構整合
          資產管理信息系統實施
          信息集成
          信息孤島

          常用鏈接

          留言簿(6)

          隨筆檔案(45)

          文章檔案(7)

          新聞檔案(1)

          相冊

          wallgate management consulting

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新郑市| 焉耆| 枝江市| 清新县| 山东省| 会昌县| 噶尔县| 临桂县| 镇安县| 三河市| 山东省| 泌阳县| 武鸣县| 巩留县| 嵩明县| 龙陵县| 揭西县| 德安县| 乌拉特中旗| 琼结县| 长沙市| 大港区| 石柱| 杂多县| 抚州市| 巴里| 临泉县| 轮台县| 平和县| 临潭县| 南平市| 饶平县| 阿图什市| 石台县| 宜州市| 两当县| 额敏县| 肃宁县| 武安市| 长乐市| 高唐县|