oracle存儲過程的游標是什么

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%FOUND屬性返回值相反???

  • 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視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享