溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么使用PostgreSQL游標(biāo)

發(fā)布時間:2021-11-08 14:52:16 來源:億速云 閱讀:1194 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹“怎么使用PostgreSQL游標(biāo)”,在日常操作中,相信很多人在怎么使用PostgreSQL游標(biāo)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用PostgreSQL游標(biāo)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

一、說明

游標(biāo)字面理解就是游動的光標(biāo)。

用數(shù)據(jù)庫語言來描述:游標(biāo)是映射在結(jié)果集中一行數(shù)據(jù)上的位置實(shí)體,有了游標(biāo)用戶就可以訪問結(jié)果集中的任意一行數(shù)據(jù)了,將游標(biāo)放置到某行后,即可對該行數(shù)據(jù)進(jìn)行操作,例如提取當(dāng)前行的數(shù)據(jù)等等。

二、分類

  • 顯式游標(biāo)

    用CURSOR...IS 命令定義的游標(biāo),它可以對查詢語句(SELECT)返回的多條記錄進(jìn)行處理。

  • 隱式游標(biāo)

    是在執(zhí)行插入(INSERT)、刪除(DELETE)、修改(UPDATE)和返回單條記錄的查詢(SELECT)語句時有PL/SQL自動定義的。

三、屬性

Oracle 游標(biāo)有4個屬性: %ISOPEN , %FOUND , %NOTFOUND, %ROWCOUNT

  • %ISOPEN 判斷游標(biāo)是否被打開,如果打開%ISOPEN 等于true,否則等于false

  • %FOUND %NOTFOUND 判斷游標(biāo)所在的行是否有效,如果有效,則%FOUNDD等于true,否則等于false

  • %ROWCOUNT 返回當(dāng)前位置為止游標(biāo)讀取的記錄行數(shù)。

四、使用

  • 聲明游標(biāo)

    CURSOR emp_info(vartype number) is select * from emp;

  • 打開游標(biāo)

    open emp_info;

  • 讀取游標(biāo)

    fetch mycur into varno,varprice;

  • 關(guān)閉游標(biāo)

    close emp_info;

五、顯示游標(biāo)遍歷

  1. 方法一

    DECLARE  
      V_EMP_INFO EMP%ROWTYPE;  
      CURSOR EMP_INFO IS  
        SELECT * FROM EMP;   --1、聲明游標(biāo)  
    BEGIN  
      OPEN EMP_INFO;         --2、打開游標(biāo),傳遞參數(shù)值    
      LOOP  
        FETCH EMP_INFO INTO V_EMP_INFO;   --3、提取游標(biāo)fetch into    
        IF EMP_INFO%FOUND THEN  
          DBMS_OUTPUT.PUT_LINE(V_EMP_INFO.ENAME || '的雇傭日期是' ||  
                               V_EMP_INFO.HIREDATE);  
        ELSE  
          DBMS_OUTPUT.PUT_LINE('已經(jīng)處理完結(jié)果集了');  
          EXIT;  
        END IF;  
      END LOOP;  
      CLOSE EMP_INFO;       --4、關(guān)閉游標(biāo)  
    END;
  2. 方法二

    DECLARE  
      V_EMP_INFO EMP%ROWTYPE;  
      CURSOR EMP_INFO IS  
        SELECT * FROM EMP; --1、聲明游標(biāo)  
    BEGIN  
      OPEN EMP_INFO; --2、打開游標(biāo),傳遞參數(shù)值    
      LOOP  
        FETCH EMP_INFO INTO V_EMP_INFO; --3、提取游標(biāo)fetch into  
        EXIT WHEN EMP_INFO%NOTFOUND;  
        DBMS_OUTPUT.PUT_LINE(V_EMP_INFO.ENAME || '的雇傭日期是' ||  
                             V_EMP_INFO.HIREDATE);  
      END LOOP;  
      DBMS_OUTPUT.PUT_LINE('已經(jīng)處理完結(jié)果集了');  
      CLOSE EMP_INFO; --4、關(guān)閉游標(biāo)  
    END;
    /
  3. 方法三

    DECLARE  
      V_EMP_INFO EMP%ROWTYPE;  
      CURSOR EMP_INFO IS  
        SELECT * FROM EMP; --1、聲明游標(biāo)  
    BEGIN  
      FOR V_EMP_INFO IN EMP_INFO LOOP  
        DBMS_OUTPUT.PUT_LINE(V_EMP_INFO.ENAME || '的雇傭日期是' ||  
                             V_EMP_INFO.HIREDATE);  
      END LOOP;  
      DBMS_OUTPUT.PUT_LINE('已經(jīng)處理完結(jié)果集了');  
    END;  
    /

六、隱式游標(biāo)處理

DECLARE  
  V_EMP_INFO EMP%ROWTYPE;  
BEGIN  
  SELECT * INTO V_EMP_INFO FROM EMP WHERE ename='SMITH';  
  IF SQL%FOUND THEN  
    DBMS_OUTPUT.PUT_LINE(V_EMP_INFO.ENAME || '的雇傭日期是' ||  
                         V_EMP_INFO.HIREDATE);  
  END IF;  
  DBMS_OUTPUT.PUT_LINE('已經(jīng)處理完結(jié)果集了');  
END; 
/

到此,關(guān)于“怎么使用PostgreSQL游標(biāo)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI