理解游標(3)隱式游標的使用

2021-08-27 07:40:28 字數 2140 閱讀 4098

當我們執行dml或select into時,pl/sql引擎會為我們宣告乙個隱式游標並管理這個游標

之所以謂之「隱式」是因為和游標相關的工作資料庫已經替我們自動做好了

我們使用隱式游標,實際就是期待返回一行,這裡有乙個原則:

對於單行記錄查詢,我們應該總是將它封裝到乙個位於包裡的函式,把這個查詢隱藏在乙個函式介面後面,然後用return語句返回資料

隱式游標是具有下面這些特殊性質的select語句:

① 這個select語句出現在**塊中的執行單元,而顯示游標是在宣告單元定義

② 查詢帶有into語句(批量處理則是bulk collect into)

③ 我們不必開啟、提取或者關閉select語句,所有這些操作都是由資料庫替我們完成

隱式查詢的通常結構:

select column_list [bulk collect] into pl/sql variable_list

雖然資料庫自動替我們執行開啟、提取、關閉等操作,但我們還是可以通過隱式游標的屬性值獲得最近執行的sql語句的資訊

㈠ 隱式游標的例子

隱式游標的常見用法是根據主鍵進行查詢

下面這個例子使用查詢把一行資訊取到乙個記錄中

表:customers

主鍵:cust_id

declare

l_customer customers%rowtype;

begin

select * into l_customer from customers where cust_id=1;

end;

對於這種單行查詢,根據上面的原則,我們通常會將它們隱藏在函式介面後面

如果我們要獲取的資訊多於一行,我們必須為查詢或者使用顯示游標,或者使用bulk collect into語句

㈡ 隱式游標的異常處理

兩種可能異常:

① no_data_found:找不到匹配行

② too_many_rows:返回結果超過一行

作為乙個規則,我們在編寫隱式查詢時總是要帶上no_data_found和too_many_rows異常處理控制代碼

function book_title (isbn_in in books.isbn%type)

return books.title%type

is return_value books.title%type;

begin

select title into return_value from books where isbn=isbn_in;

return return_value;

exception

when no_data_found

then

return null;

when too_many_rows

then

errpkg.record_and_stop('data error: '||isbn_in);

raise;

end;

㈢ 隱式sql的游標屬性

我們可以通過游標的屬性去訪問最近執行的sql資訊

如果會話還沒有執行過隱式游標,所有的隱式游標屬性都會返回null

否則,返回的就是最後一次執行的sql語句的屬性值,而不管這個sql在哪個**塊或程式中執行

要想確保檢查的確實是正確sql語句的屬性值,我們應該在該sql語句執行之後立即把屬性值儲存到區域性變數中

procedure show_book_count

isl_count pls_integer;

l_numfound pls_integer;

begin

select count(*) into l_count from books

--對屬性值作乙個快照

l_numfound := sql%rowcount;

update books set ....

dbms_output.putline(l_numfound);

end;

對顯式游標 隱式游標的理解

顯式游標主要是用於對查詢語句的處理,尤其是在查詢結果為多條記錄的情況下。1 建立測試表,插入 測試資料 2 編寫儲存過程 create or replace procedure printstudent sname in out varchar,sage in varchar as resultco...

游標的定義 顯示游標 隱式游標語法

游標的定義 1.顯示游標 普通顯示游標 帶引數 cursor c pi month varchar2,file type varchar2 is select item id,item title from item where month id pi month 不帶引數 cursor c is ...

ORACLE顯示游標和隱式游標的區別

隱式游標是oracle為所有操縱語句 包括只返回單行資料的查詢語句 自動宣告和操作的一種游標,顯式游標是由使用者宣告和操作的一種游標。顯式游標操作過程主要包括 宣告游標,開啟游標,提取游標,關閉游標。宣告格式 cursor cursor name arg1 arg1 datatype arg2 ar...