Oracle 顯式遊標使用基本方法

來源:互聯網
上載者:User

Oracle中,遊標是操作資料最常用,也是最有效方法.
 根據Oracle遊標的聲明方法不同,可以將Oracle的遊標分為顯式和隱式兩種.
 顯式遊標就是有明確聲明的遊標,顯式遊標的操作主要有如下幾類:
 
 第一,遊標的聲明:
  聲明遊標時,要用關鍵字 CURSOR ,
  如 CURSOR CUR_SAMPLE IS SELECT * FROM TAB;
  其中,CURSOR, IS 為關鍵字, CUR_SAMPLE 為遊標名稱,後面的 SELECT 語句是與遊標關聯的查詢語句.這幾部分不能少.
  
 第二,參數傳遞:
  在聲明遊標時,不僅可以使用上面的方法:
  CURSOR CUR_SAMPLE IS SELECT * FROM TAB;
  同時,也可以給遊標傳遞參數,
  CURSOR CUR_SAMPLE(PAR_TABLENAME VARCHAR2(24)) IS SELECT * FROM TAB WHERE TNAME = PAR_TABLENAME;
  給遊標傳遞的參數可以是多個,也可以是不同的類型.但是參數只能傳入,不能傳出.
  在指定參數的同時,可以同時設定預設值.
  如: CURSOR CUR_SAMPLE(PAR_TABLENAME VARCHAR2(24) DEFAULT 'EMPLOYEES') IS SELECT * FROM TAB WHERE TNAME = PAR_TABLENAME;
  
 第三,聲明遊標變數
  用下面的方法聲明一個遊標:
  CURSOR CUR_SAMPLE IS SELECT * FROM TAB;
  但在使用遊標時,必段要聲明遊標變數或其它變數,存放從遊標中取出的資料:
  遊標變數類型可以有兩種:
  
  (1) 定義遊標類型的變數:
   C_SMAPLE CUR_SAMPLE%ROWTYPE;
  (2)
   聲明一個變數列表:
   M_TNAME     VARCHAR2(30);
   M_TABTYPE   VARCHAR2(7);
   M_CLUSTERID NUMBER(5);
    
 第四,開啟遊標
  在操作資料之前,首先要開啟遊標:
  先聲明一個遊標:
  CURSOR CUR_SAMPLE IS SELECT * FROM TAB;
  然後再開啟:
  OPEN CUR_SAMPLE;
  對於有參數的遊標,在開啟時,需要同時傳遞參數:
  如遊標聲明如下:
  CURSOR CUR_SAMPLE(PAR_TABLENAME VARCHAR2(24) DEFAULT 'EMPLOYEES') IS SELECT * FROM TAB WHERE TNAME = PAR_TABLENAME;
  開啟方法如下:
  OPEN CUR_SAMPLE('EMPLOYEES');
  但時,如果參數有預設值,並且想使用預設值,可以直接:
  OPEN CUR_SAMPLE;
  此時,PAR_TABLENAME值等於'EMPLOYEES',也就是相當於
  OPEN CUR_SAMPLE('EMPLOYEES');
    
  但是如果開啟一個已經開啟的遊標,會報錯:
  ORA-06511:PL/SQL:cursor already open;
  
  OPEN 一個遊標時,遊標的指標自動的指向活動集的第一條記錄.
  
 第五,讀取遊標資料:
  讀取資料之前,遊標一定要先開啟:
  需要傳遞參數的,用參數開啟,不需要參數的,可以直接開啟.
  
  讀取資料也就是用 FETCH 方法把資料讀取到變數中.
  對於遊標類型的變數,可以用下面的方法: (遊標參數的定義請看第三)
  FETCH CUR_SAMPLE INTO C_SAMPLE;
  也可以
  FETCH CUR_SMALE INTO M_TNAME,M_TABTYPE,M_CLUSTERID;
  使用變數列表時,變數列表的順序一定要和遊標活動結果集中的欄位順序相同.
  
  如果用遊標類型的變數時,用以下的方法訪問其中的值:
  C_SMAPLE.TNAME,C_SAMPLE.TABTYPE,C_SAMPLE.CLUSTERID;
  對於用變數列表的方法,直接使用變數名稱就可以了.
  
  執行 FETCH 一次,遊標指標自動的移到下一條記錄.
  
 第六,關閉遊標:
  關閉遊標最簡單,直接
  CLOSE 遊標名; 就可以了.
  如對遊標:
  CURSOR CUR_SAMPLE IS SELECT * FROM TAB;
  就可以:
  CLOSE CUR_SAMPLE;
  遊標是否有參數,關閉方法相同.
  
 使用遊標可以極大方便PL/SQL的編寫,但遊標也比較特殊,如遊標資料只能用FETCH來讀取,遊標指標的移動在FETCH資料時,自動的移到下一條,遊標開啟時,遊標指標自動的指向第一條記錄,另外,遊標是用靜態方法開啟的,也就是遊標開啟後,如果相關表執行DML(DELETE, INSERT, UPDATE)操作,其操作結果是不能反映到遊標中來的,只能先關閉遊標,再開啟遊標,才可以更新遊標活動集的資料. 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.