日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

在oracle中游标的操作,Oracle中的游标和函数详解

發布時間:2023/12/4 32 豆豆
默认站点 收集整理的這篇文章主要介紹了 在oracle中游标的操作,Oracle中的游标和函数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle中的游標和函數詳解

1.游標

游標是一種 PL/SQL 控制結構;可以對 SQL 語句的處理進行顯示控制,便于對表的行數據

逐條進行處理。 游標并不是一個數據庫對象,只是存留在內存中。

操作步驟:

聲明游標

打開游標

取出結果,此時的結果取出的是一行數據

關閉游標 到底那種類型可以把一行的數據都裝進來

此時使用 ROWTYPE 類型,此類型表示可以把一行的數據都裝進來。 例如:查詢雇員編號為 7369 的信息(肯定是一行信息)。

例:查詢雇員編號為 7369 的信息(肯定是一行信息)。

DECLARE

eno emp.empno%TYPE ;

empInfo emp%ROWTYPE ;

BEGIN

eno := &en ;

SELECT * INTO empInfo FROM emp WHERE empno=eno ;

DBMS_OUTPUT.put_line('雇員編號:'||empInfo.empno) ;

DBMS_OUTPUT.put_line('雇員姓名:'||empInfo.ename) ;

END ;

使用 for 循環操作游標(比較常用)

DECLARE

-- 聲明游標

CURSOR mycur IS SELECT * FROM emp where empno=-1;

empInfo emp%ROWTYPE ;

cou NUMBER ;

BEGIN

-- 游標操作使用循環,但是在操作之前必須先將游標打開

FOR empInfo IN mycur

LOOP

--ROWCOUNT 對游標所操作的行數進行記錄

cou := mycur%ROWCOUNT ;

DBMS_OUTPUT.put_line(cou||'雇員編號:'||empInfo.empno) ;

DBMS_OUTPUT.put_line(cou||'雇員姓名:'||empInfo.ename) ;

END LOOP ;

END ;

我們可以看到游標FOR循環確實很好的簡化了游標的開發,我們不在需要open、fetch和close語句,不在需要用%FOUND屬性檢測是否到最后一條記錄,這一切Oracle隱式的幫我們完成了。

編寫第一個游標,輸出全部的信息。

DECLARE

-- 聲明游標

CURSOR mycur IS SELECT * FROM emp ; -- 相當于一個List (EmpPo)

empInfo emp%ROWTYPE ;

BEGIN

-- 游標操作使用循環,但是在操作之前必須先將游標打開

OPEN mycur ;

-- 使游標向下一行

FETCH mycur INTO empInfo ;

-- 判斷此行是否有數據被發現

WHILE (mycur%FOUND)

LOOP

DBMS_OUTPUT.put_line('雇員編號:'||empInfo.empno) ;

DBMS_OUTPUT.put_line('雇員姓名:'||empInfo.ename) ;

-- 修改游標,繼續向下

FETCH mycur INTO empInfo ;

END LOOP ;

END ;

也可以使用另外一種方式循環游標:LOOP…END LOOP;

DECLARE

-- 聲明游標

CURSOR mycur IS SELECT * FROM emp ;

empInfo emp%ROWTYPE ;

BEGIN

-- 游標操作使用循環,但是在操作之前必須先將游標打開

OPEN mycur ;

LOOP

-- 使游標向下一行

FETCH mycur INTO empInfo ;

EXIT WHEN mycur%NOTFOUND ;

DBMS_OUTPUT.put_line('雇員編號:'||empInfo.empno) ;

DBMS_OUTPUT.put_line('雇員姓名:'||empInfo.ename) ;

END LOOP ;

END ;

注意 1: 在打開游標之前最好先判斷游標是否已經是打開的。

通過 ISOPEN 判斷

格式:

游標%ISOPEN IF mycur%ISOPEN THEN

null ;

ELSE

OPEN mycur ;

END IF ;

注意 2:可以使用 ROWCOUNT 對游標所操作的行數進行記錄。

DECLARE

-- 聲明游標

CURSOR mycur IS SELECT * FROM emp ;

empInfo emp%ROWTYPE ;

cou NUMBER ; BEGIN

-- 游標操作使用循環,但是在操作之前必須先將游標打開

IF mycur%ISOPEN THEN

null ;

ELSE

OPEN mycur ;

END IF ;

LOOP

-- 使游標向下一行

FETCH mycur INTO empInfo ;

EXIT WHEN mycur%NOTFOUND ;

cou := mycur%ROWCOUNT ;

DBMS_OUTPUT.put_line(cou||'雇員編號:'||empInfo.empno) ;

DBMS_OUTPUT.put_line(cou||'雇員姓名:'||empInfo.ename) ;

END LOOP ;

END ;

2.函數

函數就是一個有返回值的過程。

定義一個函數:此函數可以根據雇員的編號查詢出雇員的年薪

CREATE OR REPLACE FUNCTION myfun(eno emp.empno%TYPE)

RETURN NUMBER AS rsal NUMBER ;

BEGIN

SELECT (sal+nvl(comm,0))*12 INTO rsal FROM emp WHERE empno=eno ;

RETURN rsal ;

END ;

直接寫 SQL 語句,調用此函數:

SELECT myfun(7369) FROM dual ;

寫一個函數? 輸入一個員工名字,判斷該名字在員工表中是否存在。存在返回 1,不存在返回 0

create or replace function empfun(en emp.ename%type)

return number as is_exist number;

begin

select count(*) into is_exist from emp where ename=upper(en);

return is_exist;

end;

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

總結

以上是默认站点為你收集整理的在oracle中游标的操作,Oracle中的游标和函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。