麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Oracle > 正文

Oracle中的游標和函數詳解

2024-08-29 14:00:09
字體:
來源:轉載
供稿:網友

 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91精品国产综合久久青草 | 亚洲成人激情av | 亚洲国产精品久久久久久久久久 | 一边吃奶一边摸下娇喘 | 亚洲一区二区三区高清 | 91短视频在线免费观看 | 天天草天天干天天射 | 久久亚洲美女视频 | 久久国产精 | 国产草草视频 | 国产亚洲精品久久午夜玫瑰园 | 欧美亚洲黄色片 | 成人在线观看地址 | 日本欧美一区二区三区在线播 | 国产羞羞视频在线观看免费应用 | 日本一级黄色大片 | 曰批全过程120分钟免费69 | 亚洲福利视频52 | 午夜视频在线免费观看 | 欧美一区二区三区久久精品视 | 日本精品久久久一区二区三区 | 精品国产乱码久久久久久丨区2区 | 我爱我色成人网 | 午夜精品久久久久久久爽 | 成年人免费视频大全 | 免费观看黄色一级视频 | 久久在草 | 美女亚洲综合 | 91一级毛片 | 国产精品av久久久久久久久久 | 日本68xxxx| 亚洲视频观看 | 美国一级黄色毛片 | 欧美日韩免费看 | 国产午夜小视频 | av影院在线 | 国产超碰人人爽人人做人人爱 | 亚洲性在线视频 | 国产精品美女久久久免费 | 毛片视频大全 | 欧美成人一区二区三区 |