首頁 >資料庫 >Oracle >oracle預存程​​序的遊標是什麼

oracle預存程​​序的遊標是什麼

WBOY
WBOY原創
2022-02-28 11:05:398256瀏覽

在oracle中,遊標是SQL的一個記憶體工作區,由系統或使用者以變數的形式定義,用於暫時儲存從資料庫中提取的資料區塊;資料從資料庫傳送到遊標變數中後,應用程式再從遊標變數中分解出所需的數據,並進行處理。

oracle預存程​​序的遊標是什麼

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle預存程​​序的遊標是什麼

1.遊標的使用。看到的一段解釋很好的概念,如下:

    遊標是SQL的記憶體工作區,由系統或使用者以變數的形式定義。遊標的作用就是用來暫時儲存從資料庫中提取的資料塊。在某些情況下,需要把資料從存放在磁碟的表中調到電腦記憶體中處理,最後將處理結果顯示出來或最終寫回資料庫。這樣資料處理的速度才會提高,否則頻繁的磁碟資料交換會降低效率。 

遊標有兩種:明確遊標和隱含遊標。在前述程式中用到的SELECT...INTO...查詢語句,一次只能從資料庫中提取一行數據,對於這種形式的查詢和DML操作,系統都會使用一個隱式遊標。但是如果要提取多行數據,就要由程式設計師定義一個明確遊標,並透過與遊標有關的語句進行處理。明確遊標對應一個傳回結果為多行多列的SELECT語句。 

遊標一旦打開,資料就從資料庫傳送到遊標變數中,然後應用程式再從遊標變數中分解出所需的數據,並進行處理。在我們進行insert、update、delete和select   value into  variable 的操作中,所使用的是隱式遊標。

隱含遊標的屬性 傳回值類型意義 : 

  • SQL%ROWCOUNT    整數  代表DML語句成功執行的資料行數   

  • SQL%FOUND   布林型 值為TRUE代表插入、刪除、更新或單行查詢作業成功   

  • SQL%NOTFOUND    布林型 與SQL%

  • #SQL%ISOPEN  布爾型 DML執行過程中為真,結束後為假  

2.隱含遊標:

create or replace procedure prc_example (epo in number) as
BEGIN  
        UPDATE emp SET sal=sal+100 WHERE empno=epo;   
         IF SQL%FOUND THEN    
        DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');   
        COMMIT;    
        ELSE  
        DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');   
         END IF;    
        END; 
declare
e_number number;
begin
e_number:=7788;
prc_example(e_number);
 end;

3.顯示遊標:

使用遊標查詢所有編號為10 的員工名稱

create or replace procedure prc_example is
begin
    declare
    cursor emp_sor  is select ename,sal from emp where deptno=10;  
    cname emp.ename%type;     
    csal emp.sal%type;
 begin
   open emp_sor;       
   loop        
   fetch emp_sor into cname,csal;  --取游标的值给变量。             
   dbms_output.put_line('ename:'||cname);        
   exit when emp_sor%notfound;        
  end loop;         
  close emp_sor;     
 end;
end;
推薦教學:《

Oracle影片教學###》###

以上是oracle預存程​​序的遊標是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn