1. 程式人生 > >oracle PL\SQL塊和複合型別

oracle PL\SQL塊和複合型別

2018-12-04

PL\SQL程式塊由三個部分組成:宣告部分、執行部分、異常處理部分

其結構如下:

  declare

    /*宣告部分:說明要用到得變數,型別及遊標,以及區域性儲存過程和函式*/

      /*變數的定義和系統保留字要區分開(sql server 中可用@  PL\SQL不能用@)*/

  begin

    /*執行部分:過程及SQL語句*/

      /*必須有*/

  exception

    /*異常處理部分:錯誤處理*/

  end;

PL/SQL中除了一些常見的變數型別外,還有複合型別

  複合型別分為記錄和表

  記錄:由單行多列的標量構成的複合結構。可以看做是一種使用者自定義資料型別。將一個或多個標量封裝成一個物件進行操作。是一種臨時複合物件型別。

    語法:

       type record_type is record(

        Field1 type1 [not null] [:= exp1],

        Field1 type1 [not null] [:= exp2],

        ...

        Fieldn typen [not null] [:= expn]);

      其中可以用%type和%rowtype 來為宣告的變數快速指明型別。

        %type——使其對應的變數型別與已經定義好的某個資料變數的型別相同

        %rowtype——返回一個記錄型別,其資料型別和資料庫表的資料結構相同

   :使用記錄型別變數只能儲存一行資料,這限制了select返回行數,如果SELECT語句返回多行就會錯。Oracle提供了另外一種自定義型別,也就是                  表型別,它是對記錄型別的擴充套件,允許處理多行資料,類似於表

    語法:

      type type_name is table of table%rowtype  [index by binary_integer];

例子1:

  

  結果:

    

  在這個例子中注意:宣告部分類似JAVA中的類——先定義一個類,然後定義一個它的物件

           執行部分:select —into—from—where  從表中選擇一個合適的記錄,然後賦值給into後的記錄型別變數

例子2:

  

  結果:

   

  在例子2中,C_course%rowtype——說明表型別變數course_table_type的資料型別和C_course表的資料結構相同

         index by binary_integer——指定系統建立一個主鍵索引,用於引用表型別變數中的特定行

                    /*有這個後面的my_table(1)和my_table(2)才有意義*/

       建立表型別變數的意義就如上面提到的一樣,在於處理多行資料。