程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle 9i 游標

Oracle 9i 游標

編輯:關於Oracle數據庫

  游標是從數據表中提取出來的數據,以臨時表的形式存放在內存中,在游標中有一個數據指針,在初始狀態下指向的是首記錄,利用fetch語句可以移動該指針,從而對游標中的數據進行各種操作,然後將操作結果寫回數據表中。

  定義游標

  游標作為一種數據類型,首先必須進行定義,其語法如下。

  cursor 游標名 is select 語句;

  cursor是定義游標的關鍵詞,select是建立游標的數據表查詢命令。

  以scott用戶連接數據庫,在【SQLPlus Worksheet】中執行下列PL/SQL程序,該程序定義tempsal為與scott.emps數據表中的sal字段類型相同的變量,mycursor為從scott.emp數據表中提取的sal大於tempsal的數據構成的游標。

  執行結果如圖9.35所示。

  

  ―――――――――――――――――――――――――――――――――――――
  
        set serveroutput on
  
        declare
    
        tempsal scott.emp.sal%type;
    
        cursor mycursor is
      
        select * from scott.emp
      
        where sal>tempsal;
  
        begin
    
        tempsal:=800;
    
        open mycursor;
  
        end;
  
        ―――――――――――――――――――――――――――――――――――――

  【配套程序位置】:第9章\ cursordefine.sql。

  打開游標

  要使用創建好的游標,接下來要打開游標,語法結構如下:

  open 游標名;

  打開游標的過程有以下兩個步驟:

  (1)將符合條件的記錄送入內存。

  (2)將指針指向第一條記錄。

  提取游標數據

  要提取游標中的數據,使用fetch命令,語法形式如下。

  fetch 游標名 into 變量名1, 變量名2,……;

  或

  fetch 游標名 into 記錄型變量名;

  在【SQLPlus Worksheet】中執行下列PL/SQL程序,該程序定義cursorrecord變量是游標mycursor的記錄行變量,在游標mycursor的結果中找到sal字段大於800的第一個記錄,顯示deptno字段的內容。

  執行結果如圖9.36所示。

  

  ―――――――――――――――――――――――――――――――――――――
  
        set serveroutput on
  
        declare
    
        tempsal scott.emp.sal%type;
    
        cursor mycursor is
      
        select * from scott.emp
      
        where sal>tempsal;
    
        cursorrecord mycursor%rowtype;
  
        begin
    
        tempsal:=800;
    
        open mycursor;
    
        fetch mycursor into cursorrecord;
    
        dbms_output.put_line(to_char(cursorrecord.deptno));
  
        end;
  
        ―――――――――――――――――――――――――――――――――――――

  【配套程序位置】:第9章\ cursorfetch.sql。

  關閉游標

  使用完游標後,要關閉游標,使用close命令,語法形式如下:

  close 游標名;

  游標的屬性

  游標提供的一些屬性可以幫助編寫PL/SQL程序,游標屬性的使用方法為:游標名[屬性],例如mycursor%isopen,主要的游標屬性如下。

  1. %isopen屬性

  該屬性功能是測試游標是否打開,如果沒有打開游標就使用fetch語句將提示錯誤。

  在【SQLPlus Worksheet】中執行下列PL/SQL程序,該程序利用%isopen屬性判斷游標是否打開。執行結果如圖9.37所示。

  

  ―――――――――――――――――――――――――――――――――――――
  
        set serveroutput on
  
        declare
            tempsal scott.emp.sal%type;
            cursor mycursor is
              select * from scott.emp
              where sal>tempsal;
            cursorrecord mycursor%rowtype;
           begin
            tempsal:=800;
            if mycursor%isopen then
              fetch mycursor into cursorrecord;
              dbms_output.put_line(to_char(cursorrecord.deptno));
            else
              dbms_output.put_line('游標沒有打開!');
            end if;
  
        end;
  
        ―――――――――――――――――――――――――――――――――――――

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved