濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Oracle中的游標(biāo)和函數(shù)詳解

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

熱門(mén)標(biāo)簽:百度地圖標(biāo)注飯店位置怎么 上海網(wǎng)絡(luò)外呼系統(tǒng) 理財(cái)產(chǎn)品電銷(xiāo)機(jī)器人 百度地圖標(biāo)注注解 南通電銷(xiāo)外呼系統(tǒng)哪家強(qiáng) 電話(huà)機(jī)器人那種好 外呼系統(tǒng)好點(diǎn)子 地圖標(biāo)注的坐標(biāo)點(diǎn) 區(qū)域地圖標(biāo)注怎么設(shè)置

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

1.游標(biāo)

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

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

操作步驟:

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

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

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

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

例:查詢(xún)雇員編號(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)打開(kāi) 
  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í)很好的簡(jiǎn)化了游標(biāo)的開(kāi)發(fā),我們不在需要open、fetch和close語(yǔ)句,不在需要用%FOUND屬性檢測(cè)是否到最后一條記錄,這一切Oracle隱式的幫我們完成了。 

編寫(xiě)第一個(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)打開(kāi) 
  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)打開(kāi) 
  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: 在打開(kāi)游標(biāo)之前最好先判斷游標(biāo)是否已經(jīng)是打開(kāi)的。

通過(guò) 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)打開(kāi) 
  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è)有返回值的過(guò)程。

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

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 ; 

直接寫(xiě) SQL 語(yǔ)句,調(diào)用此函數(shù):

SELECT myfun(7369) FROM dual ; 

寫(xiě)一個(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ì)本站的支持!

您可能感興趣的文章:
  • 詳解Oracle游標(biāo)的簡(jiǎn)易用法
  • Oracle游標(biāo)的使用實(shí)例詳解
  • Oracle中游標(biāo)Cursor基本用法詳解
  • 詳解Oracle隱式游標(biāo)和顯式游標(biāo)
  • Oracle出現(xiàn)超出打開(kāi)游標(biāo)最大數(shù)的解決方法
  • Oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán)
  • Oracle存儲(chǔ)過(guò)程返回游標(biāo)實(shí)例詳解
  • Oracle 游標(biāo)使用總結(jié)
  • oracle 在一個(gè)存儲(chǔ)過(guò)程中調(diào)用另一個(gè)返回游標(biāo)的存儲(chǔ)過(guò)程
  • Oracle游標(biāo)使用參考語(yǔ)句實(shí)例解析

標(biāo)簽:遼源 中衛(wèi) 自貢 寧波 百色 紹興 海東 昭通

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle中的游標(biāo)和函數(shù)詳解》,本文關(guān)鍵詞  Oracle,中的,游標(biāo),和,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle中的游標(biāo)和函數(shù)詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Oracle中的游標(biāo)和函數(shù)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    新化县| 沧源| 泸州市| 华亭县| 榆中县| 石阡县| 高清| 潮州市| 阿鲁科尔沁旗| 建昌县| 砀山县| 田东县| 龙州县| 武乡县| 鞍山市| 建宁县| 滨州市| 普兰店市| 仙游县| 玉田县| 博乐市| 衡阳市| 英吉沙县| 灵宝市| 榆树市| 博爱县| 高淳县| 雷山县| 岳普湖县| 恩平市| 霍林郭勒市| 堆龙德庆县| 璧山县| 香格里拉县| 惠水县| 永川市| 长兴县| 余江县| 章丘市| 额济纳旗| 洛川县|