oracle 遊標

 遊標:隱式遊標和顯示遊標。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;

 

詳細介紹:http://www.javashuo.com/article/p-ajwchzzw-mm.html

相關文章
相關標籤/搜索