国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle中的游標(biāo)和函數(shù)詳解

2020-07-26 14:06:02
字體:
供稿:網(wǎng)友

 Oracle中的游標(biāo)和函數(shù)詳解

1.游標(biāo)

游標(biāo)是一種 PL/SQL 控制結(jié)構(gòu);可以對(duì) SQL 語句的處理進(jìn)行顯示控制,便于對(duì)表的行數(shù)據(jù)

逐條進(jìn)行處理。 游標(biāo)并不是一個(gè)數(shù)據(jù)庫對(duì)象,只是存留在內(nèi)存中。

操作步驟:

   聲明游標(biāo)
   打開游標(biāo)

   取出結(jié)果,此時(shí)的結(jié)果取出的是一行數(shù)據(jù)

   關(guān)閉游標(biāo) 到底那種類型可以把一行的數(shù)據(jù)都裝進(jìn)來

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

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

DECLARE   eno emp.empno%TYPE ;    empInfo emp%ROWTYPE ;  BEGIN   eno := &en ;   SELECT * INTO empInfo FROM emp WHERE empno=eno ;    DBMS_OUTPUT.put_line('雇員編號(hào):'||empInfo.empno) ;    DBMS_OUTPUT.put_line('雇員姓名:'||empInfo.ename) ;  END ; 

使用 for 循環(huán)操作游標(biāo)(比較常用)

DECLARE   -- 聲明游標(biāo)   CURSOR mycur IS SELECT * FROM emp where empno=-1;   empInfo emp%ROWTYPE ;   cou NUMBER ;  BEGIN   -- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開   FOR empInfo IN mycur    LOOP     --ROWCOUNT 對(duì)游標(biāo)所操作的行數(shù)進(jìn)行記錄     cou := mycur%ROWCOUNT ;      DBMS_OUTPUT.put_line(cou||'雇員編號(hào):'||empInfo.empno) ;      DBMS_OUTPUT.put_line(cou||'雇員姓名:'||empInfo.ename) ;    END LOOP ; END ;  

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

編寫第一個(gè)游標(biāo),輸出全部的信息。

DECLARE   -- 聲明游標(biāo)   CURSOR mycur IS SELECT * FROM emp ; -- 相當(dāng)于一個(gè)List (EmpPo)   empInfo emp%ROWTYPE ;  BEGIN   -- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開   OPEN mycur ;   -- 使游標(biāo)向下一行   FETCH mycur INTO empInfo ;   -- 判斷此行是否有數(shù)據(jù)被發(fā)現(xiàn)   WHILE (mycur%FOUND)      LOOP        DBMS_OUTPUT.put_line('雇員編號(hào):'||empInfo.empno) ;        DBMS_OUTPUT.put_line('雇員姓名:'||empInfo.ename) ;       -- 修改游標(biāo),繼續(xù)向下       FETCH mycur INTO empInfo ;      END LOOP ; END ; 

也可以使用另外一種方式循環(huán)游標(biāo):LOOP…END LOOP;

DECLARE   -- 聲明游標(biāo)   CURSOR mycur IS SELECT * FROM emp ;   empInfo emp%ROWTYPE ;  BEGIN   -- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開   OPEN mycur ;    LOOP     -- 使游標(biāo)向下一行     FETCH mycur INTO empInfo ;     EXIT WHEN mycur%NOTFOUND ;      DBMS_OUTPUT.put_line('雇員編號(hào):'||empInfo.empno) ;      DBMS_OUTPUT.put_line('雇員姓名:'||empInfo.ename) ;   END LOOP ;  END ; 

注意 1: 在打開游標(biāo)之前最好先判斷游標(biāo)是否已經(jīng)是打開的。

通過 ISOPEN 判斷

格式:

游標(biāo)%ISOPEN IF mycur%ISOPEN THEN null ;  ELSE  OPEN mycur ;  END IF ; 

注意 2:可以使用 ROWCOUNT 對(duì)游標(biāo)所操作的行數(shù)進(jìn)行記錄。

DECLARE   -- 聲明游標(biāo)   CURSOR mycur IS SELECT * FROM emp ;   empInfo emp%ROWTYPE ;   cou NUMBER ; BEGIN   -- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開   IF mycur%ISOPEN THEN     null ;    ELSE     OPEN mycur ;    END IF ;    LOOP     -- 使游標(biāo)向下一行     FETCH mycur INTO empInfo ;     EXIT WHEN mycur%NOTFOUND ;     cou := mycur%ROWCOUNT ;      DBMS_OUTPUT.put_line(cou||'雇員編號(hào):'||empInfo.empno) ;      DBMS_OUTPUT.put_line(cou||'雇員姓名:'||empInfo.ename) ;    END LOOP ; END ; 

2.函數(shù)

函數(shù)就是一個(gè)有返回值的過程。

定義一個(gè)函數(shù):此函數(shù)可以根據(jù)雇員的編號(hào)查詢出雇員的年薪

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 語句,調(diào)用此函數(shù):

SELECT myfun(7369) FROM dual ; 

寫一個(gè)函數(shù)  輸入一個(gè)員工名字,判斷該名字在員工表中是否存在。存在返回 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; 

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 内丘县| 灵璧县| 盘锦市| 绥宁县| 化德县| 林周县| 白河县| 镇巴县| 沙田区| 安义县| 光泽县| 南溪县| 焉耆| 共和县| 宁城县| 天峻县| 河北省| 荔波县| 城市| 广元市| 台北市| 丰都县| 遂溪县| 禄劝| 文昌市| 烟台市| 北京市| 长春市| 堆龙德庆县| 竹山县| 三河市| 新昌县| 桦川县| 正定县| 牙克石市| 浦北县| 建瓯市| 治多县| 麻阳| 龙川县| 友谊县|