顯式遊標是靜態遊標(也就是說,遊標與一條SQL語句關聯,在編譯塊時此語句是已知的)。
在運行時遊標變量也可以與不同的語句關聯。遊標變量類似於PL/SQL變量,可以在運行時接納不同的值。靜態遊標類似於PL/SQL常量,因爲它們只能與一個運行時查詢關聯。
遊標是一種引用類型,引用類型與指針相同,它可以在程序運行時指定不同的存儲位置。爲了使用引用類型,必須聲明變量,然後必須分配存儲空間。
引用類型聲明語法如下:
REF_var type
其中type是事先定好的類型,ref關鍵字指示新類型是指:指向已定義類型的指針,因此,遊標的類型是REF遊標。定義遊標變量類型的完整語法如下:
Type type_name is ref cursor return return_type;
其中type_name是新引用類型的名稱,返回類型是指示將由遊標變量返回的select列表的類型的記錄類型。遊標變量的返回類型必須是記錄類型。可以將它顯式聲明爲用戶定義的記錄,也可以使用%ROWTYPE隱式聲明它。在定義引用類型之後,可以聲明變量。
具有約束的遊標變量和無約束的遊標變量
當遊標變量具有返回類型時,它稱爲具有約束的遊標變量或強遊標。但是,遊標變量不一定需要具有返回類型,這樣的遊標變量稱爲無約束的遊標變量或弱遊標。強遊標和弱遊標的聲明的示例如下:
--強遊標類型
Type t_add_ref is ref cursor returnvendor_master%rowtype;
--弱遊標類型
Type t_adds_ref is ref cursor;
--聲明遊標變量
V_add_ref t_add_ref; --強遊標變量 或具有約束變量
V_adds_ref t_adds_ref; --弱遊標變量或無約束變量
打開遊標變量進行查詢:
遊標變量必須與特定的select語句關聯。這是由open語句實現的,該語句已擴展爲允許指定查詢。使用open語句的語法如下。
Open cursor_variable for select_statement;
其中cursor_variable是以前聲明的遊標變量,select_statement是所需的查詢。如果遊標變量是具有約束的,則select列表必須與遊標的返回類型匹配。
關閉遊標變量
與靜態遊標一樣,遊標變量是使用close語句關閉的。這將釋放用於查詢的資源。但是,它不一定釋放遊標變量本身的存儲空間。在變量超出其作用域時,將釋放變量的存儲空間。關閉已經關閉的遊標或遊標變量是非法的。
--此實例根據用戶選擇的動態遊標打開兩個不同的sql其中一個