遊標:隱式遊標和顯示遊標。html
1 隱式遊標sql
隱式遊標種類:數據庫
DML操做和單行SELECT語句會使用隱式遊標,它們是:
* 插入操做:INSERT。
* 更新操做:UPDATE。
* 刪除操做:DELETE。
* 單行查詢操做:SELECT ... INTO ...(一次只能從數據庫中提取一行數據,獲取多行數據用顯示遊標)。 oop
遊標屬性:fetch
隱式遊標的屬性 返回值類型 意 義 SQL%ROWCOUNT 整型 表明DML語句成功執行的數據行數 SQL%FOUND 布爾型 值爲TRUE表明插入、刪除、更新或單行查詢操做成功 SQL%NOTFOUND 布爾型 與SQL%FOUND屬性返回值相反 SQL%ISOPEN 布爾型 DML執行過程當中爲真,結束後爲假
示例1:使用隱式遊標的屬性,判斷對僱員工資的修改是否成功。 htm
BEGIN UPDATE emp SET sal = sal + 100 WHERE empno = 1234; IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE('成功修改僱員工資!'); COMMIT; ELSE DBMS_OUTPUT.PUT_LINE('修改僱員工資失敗!'); END IF; END;
2 顯示遊標blog
遊標步驟:聲明遊標 、打開遊標 、提取數據、關閉遊標。get
顯式遊標的屬性:class
遊標的屬性 返回值類型 意 義 %ROWCOUNT 整型 得到FETCH語句返回的數據行數 %FOUND 布爾型 最近的FETCH語句返回一行數據則爲真,不然爲假 %NOTFOUND 布爾型 與%FOUND屬性返回值相反 %ISOPEN 布爾型 遊標已經打開時值爲真,不然爲假
DECLARE V_ename VARCHAR2(10); CURSOR emp_cursor IS SELECT ename FROM emp; BEGIN OPEN emp_cursor; IF emp_cursor%ISOPEN THEN LOOP FETCH emp_cursor INTO v_ename; EXIT WHEN emp_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(to_char(emp_cursor%ROWCOUNT) || '-' || v_ename); END LOOP; ELSE DBMS_OUTPUT.PUT_LINE('用戶信息:遊標沒有打開!'); END IF; CLOSE emp_cursor; END;
2.1 fetch 讀取遊標select
declare zb_row scsj_zb%rowtype; cursor my_cursor is select * from scsj_zb where rownum < 3; begin open my_cursor; for i in 1 .. 3 loop fetch my_cursor into zb_row; dbms_output.put_line(zb_row.zb_bm); end loop; close my_cursor; end;
declare zbbm varchar(50); zbmc varchar(50); cursor my_cursor is select zb_bm, zbmc from scsj_zb a where rownum < 3; begin open my_cursor; for i in 1 .. 3 loop fetch my_cursor into zbbm, zbmc; dbms_output.put_line(zbbm || ':' || zbmc); end loop; close my_cursor; end;
SET SERVEROUTPUT ON BEGIN FOR re IN (SELECT ename FROM EMP) LOOP DBMS_OUTPUT.PUT_LINE(re.ename) END LOOP; END;
2.2 for 讀取遊標
declare cursor my_cursor is select * from scsj_zb where rownum < 3; begin for my_row in my_cursor loop dbms_output.put_line(my_row.zb_bm); end loop; end;