欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年05月15日 10:47:47   投稿:lqh  
這篇文章主要介紹了 Oracle中的游標(biāo)和函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下

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

1.游標(biāo)

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

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

操作步驟:

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

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

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

   此時使用 ROWTYPE 類型,此類型表示可以把一行的數(shù)據(jù)都裝進(jìn)來。 例如:查詢雇員編號為 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 循環(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 對游標(biāo)所操作的行數(shù)進(jìn)行記錄 
    cou := mycur%ROWCOUNT ;  
    DBMS_OUTPUT.put_line(cou||'雇員編號:'||empInfo.empno) ;  
    DBMS_OUTPUT.put_line(cou||'雇員姓名:'||empInfo.ename) ;  
  END LOOP ; 
END ;  

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

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

DECLARE 
  -- 聲明游標(biāo) 
  CURSOR mycur IS SELECT * FROM emp ; -- 相當(dāng)于一個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('雇員編號:'||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('雇員編號:'||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 對游標(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||'雇員編號:'||empInfo.empno) ;  
    DBMS_OUTPUT.put_line(cou||'雇員姓名:'||empInfo.ename) ;  
  END LOOP ; 
END ; 

2.函數(shù)

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

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

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 ; 

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

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

相關(guān)文章

  • Oracle數(shù)據(jù)庫的啟動與關(guān)閉方法

    Oracle數(shù)據(jù)庫的啟動與關(guān)閉方法

    這篇文章主要介紹了Oracle數(shù)據(jù)庫的啟動與關(guān)閉方法,需要的朋友可以參考下
    2013-07-07
  • Oracle Sqlplus命令登錄多種方式案例講解

    Oracle Sqlplus命令登錄多種方式案例講解

    這篇文章主要介紹了Oracle Sqlplus命令登錄多種方式案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Oracle數(shù)據(jù)加密方法分析

    Oracle數(shù)據(jù)加密方法分析

    這篇文章主要介紹了Oracle數(shù)據(jù)加密方法,實例分析了Oracle基于md5算法的數(shù)據(jù)加密技巧,需要的朋友可以參考下
    2016-09-09
  • Oracle三種循環(huán)(For、While、Loop)實現(xiàn)九九乘法表

    Oracle三種循環(huán)(For、While、Loop)實現(xiàn)九九乘法表

    這篇文章主要為大家詳細(xì)介紹了Oracle三種循環(huán)For、While、Loop實現(xiàn)九九乘法表,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • oracle怎樣才能徹底卸載干凈

    oracle怎樣才能徹底卸載干凈

    Oracle安裝上之后,通過自帶的卸載工具一般都無法將程序卸載干凈,導(dǎo)致下次的程序安裝出錯,這篇文章主要給大家介紹了關(guān)于oracle怎樣才能徹底卸載干凈的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Oracle中NEXTVAL案例詳解

    Oracle中NEXTVAL案例詳解

    這篇文章主要介紹了Oracle中NEXTVAL案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • ORACLE批量導(dǎo)入圖片到BLOB字段代碼示例

    ORACLE批量導(dǎo)入圖片到BLOB字段代碼示例

    這篇文章主要介紹了ORACLE批量導(dǎo)入圖片到BLOB字段代碼示例,此代碼示例是文章作者的項目源碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Oracle終極徹底卸載的完整步驟

    Oracle終極徹底卸載的完整步驟

    這篇文章主要給大家介紹了關(guān)于Oracle終極徹底卸載的完整步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • ORA-00947:Not enough values (沒有足夠的值)的深入分析

    ORA-00947:Not enough values (沒有足夠的值)的深入分析

    本篇文章是對ORA-00947:Not enough values (沒有足夠的值)的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 檢查Oracle數(shù)據(jù)庫版本的7種方法匯總

    檢查Oracle數(shù)據(jù)庫版本的7種方法匯總

    在Oracle數(shù)據(jù)庫的發(fā)展中,數(shù)據(jù)庫一直處于不斷升級狀態(tài),下面這篇文章主要給大家介紹了關(guān)于檢查Oracle數(shù)據(jù)庫版本的7種方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10

最新評論