無論是顯式游標還是隱式游標都會有四個屬性分別是:%ISOPEN、%FOUND、%NOTFOUND、%ROWCOUNT 下面我們分別對着幾種屬性進行分析。
%FOUND
該屬性表示當前游標是否指向有效的一行,結果是一個Boolean 類型的。這個屬性一般用來判斷是否結束當前游標的使用。
OPEN emp_cur; --打開游標 --將第一行的數據放入變量中,之后游標后移 FETCH emp_cur INTO emp_no, emp_nanme; LOOP EXIT WHEN NOT emp_cur%FOUND; --如果游標已經到末尾結束 IF emp_no = '7839' THEN INSERT INTO t_emp values(emp_no,emp_nanme); else INSERT INTO t_emp2 values(emp_no,emp_nanme); END IF; FETCH emp_cur INTO emp_no, emp_nanme; END LOOP; CLOSE emp_cur; --關閉游標
在隱式游標中引用方法為 SQL%FOUND。
delete from student where sid = 1; if SQL%FOUND THEN INSERT INTO states values(1,1); else INSERT INTO states values(1,0); end if;
%NOTFOUND
這個屬性和上面的 %FOUND 很類似,只不過結果相反。這里就不舉例子了,大家自己練習下。
%ROWCOUNT
這個屬性記錄了游標取過記錄的行數,也可以理解為當前游標所在的行數。這個屬性在循環的時候十分有效。
LOOP FETCH emp_cur INTO emp_no, emp_nanme; EXIT WHEN emp_cur%ROWCOUNT=10; ... END LOOP;
在隱式游標中使用 %ROWCOUNT
%ISOPEN
顧名思義是表示游標是否處於打開的狀態。在我們的實際使用前最好使用該屬性進行檢查。
IF emp_cur%ISOPEN THEN FETCH emp_cur INTO emp_no, emp_nanme; ELSE OPEN emp_cur END IF;
在隱式游標中可以使用 SQL%ISOPEN 進行引用,但是需要說的是隱式游標中 SQL%ISOPEN 總是為 TRUE 因此隱式游標中不需要打開游標關閉游標,也不需要對游標的狀態進行檢查。