--oracle 會為每一個非顯示遊标的sql dml 語句都建立一個隐式遊标,隐式遊标也稱為sql 遊标。與顯示遊标不同,不能對一個隐式遊标執行open,close和fetch語句。oracle 隐式的打開sql遊标,處理sql遊标,然後再關閉該遊标。
declare
vid t.object_id%type;
vowner t.owner%type;
begin
select object_id ,owner into vid,vowner from t where rownum <2;
if sql%isopen then
dbms_output.put_line('it is not possiable');
else
dbms_output.put_line('vid is '||vid||' vowner is '||vowner);
dbms_output.put_line('%isopen 的屬性為false');
end if;
end;
輸出為:
vid is 1 vowner is sys
%isopen 的屬性為false
--和顯示遊标一樣,隐式遊标也有四大屬性%found,%isopen,%notfound,%rowcount.由于隐式遊标沒有名次,oracle提供了一種方法在屬性前面加 關鍵字 sql,這樣我們就可以使用這些屬性了。
例子如下:
rowsnum integer;
rowsnum := sql%rowcount;
dbms_output.put_line('vid is '||vid||' vowner is '||vowner);
dbms_output.put_line('rowsnum is '||rowsnum);
if sql%found then
dbms_output.put_line('sql%found is true;');
dbms_output.put_line('sql%found is false;');
end if;
if sql%notfound then
dbms_output.put_line('sql%notfound is true;');
dbms_output.put_line('sql%notfound is false;');
end;
rowsnum is 1
sql%found is true;
sql%notfound is false;