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)才有意義*/
建立表型別變數的意義就如上面提到的一樣,在於處理多行資料。