本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          隨筆-230  評論-230  文章-8  trackbacks-0

          SQL%FOUND 指明insert ,update或delete是否影響到行
          SQL%ISOPEN 指明游標(biāo)是否打開,這個值在隱式游標(biāo)中永遠(yuǎn)為false,因為隱式游標(biāo)在DML語句執(zhí)行后自動關(guān)閉
          SQL%NOTFOUND? 表示DML語句在修改行的是候是否失敗了
          SQL%ROWCOUNT 指明DML語句影響到的行數(shù)

          游標(biāo)變量就是一個PL/SQL變量,你可以在運行時針對不同的查詢使用該變量同一游標(biāo)變量能指行不同的工作區(qū)

          游標(biāo)變量的定義包括兩個步驟:
          1 定義CURSOR類型的指針
          ? 在pl/SQL中,使用下面語法定義CURSOR類型的指針
          ? ref type
          ? 如
          ? TYPE rc IS REF CURSOR
          2 定義REF CURSOR 類型的變量
          ? v_rc rc
          ? 完整的聲明游標(biāo)變量方法如下:
          ? type rc is ref cursor;
          ? v_rc rc;

          這樣定義的游標(biāo)類型叫弱類ref curosr 類型 ,這是因為沒指明游標(biāo)的返回類型,因此它能指向任何一個具有任意多列的select 查詢。
          定義帶有返回類型的強ref cursor 類型
          type ref_type_name is ref cursor return return_type;

          type rc is ref cursor return hrc_tab%rowtype;
          v_rc rc;
          游標(biāo)變量的使用
          ?1) 分配內(nèi)存
          ?2) 為查詢打開游標(biāo)變量
          ?3) 把結(jié)果取到pl/sql記錄中
          ?4) 關(guān)閉游標(biāo)變量


          1 分配內(nèi)存
          ?? 在pl/sql中聲明游標(biāo)變量后,pl/sql引擎會自動為期分配存儲數(shù)據(jù)行的內(nèi)存空間
          2 打開游標(biāo)
          ? open?? 游標(biāo)變量名 fro select_query
          3 把結(jié)果取到pl/sql記錄或單獨pl/sql變量中? fetch cursor_variable_name into var1,var2

          ?fetch?? cursor_variable_name into table_name%rowtype;

          4 關(guān)閉游標(biāo)變量
          ? close? cursor_variable_name

          一個例子
          declare
          ?type rc is ref cursor ;
          ?v_rc rc;
          ?v_rc2 rc;
          ?hrc_rec hrc_tab%rowtype;
          begin
          ? open v_rc for select * form hrc_tab;
          ? v_rc2:=vrc;
          loop
          ? fetch v_rc into hrc_rec;
          ? exit when v_rc%nofound;
          ? dbms_output.put_line();
          end loop;?
          close v_rc;?
          end;
          注意:當(dāng)關(guān)閉v_rc的同時也會關(guān)閉v_rc2,反之亦然。為一個游標(biāo)變量簡單的賦上一個已經(jīng)打開的游標(biāo)變量值,實際上是一個游標(biāo)指向另一個工作區(qū)。不要把一個沒打開的游標(biāo)變量賦值給另一個游標(biāo)變量,那樣會出現(xiàn)invalid_cursor錯誤
          游標(biāo)變量也有4個屬性curosr_variable_name%ISOPEN,curosr_variable_name%FOUND,curosr_variable_name%NOTFOUND,curosr_variable_name%ROWCOUNT
          使用的辦法和普通游標(biāo)一樣。

          游標(biāo)的高級功能

          使用游標(biāo)變量真正的好處是必須使用同一個游標(biāo)變量打開多個查詢,或根據(jù)運行時的條件需要動態(tài)的把不同的
          查詢賦給相同的游標(biāo)變量時體現(xiàn)。

          使用同一游標(biāo)變理打開多個查詢

          ?declare
          ?type rc is ref cursor ;
          ?v_rc rc;
          ?v_rc2 rc;
          ?hrc_rec hrc_tab%rowtype;
          begin
          ? open v_rc for select * form hrc_tab;
          ? v_rc2:=vrc;
          loop
          ? fetch v_rc into hrc_rec;
          ? exit when v_rc%nofound;
          ? dbms_output.put_line();
          end loop;?
          ?open v_rc for select * from hrc_tab where class_id='55';
          loop
          ? fetch v_rc into hrc_rec;
          ? exit when v_rc%nofound;
          ? dbms_output.put_line();
          end loop;?
          close v_rc;?
          end;

          兩個地方值得注意:
          ?同一游標(biāo)變量v_rc指向兩個不同的查詢
          ?第一個查詢打開v_rc并取得值后,v_rc并沒有立即關(guān)閉,它只是簡單地為第二個查詢重新打開一次,一個新
          的結(jié)果值就確定下來


          -===========================------
          游標(biāo)表達式
          使用游標(biāo)表達式的原因:使用游標(biāo)表這式可以避免聲明和使用多個游標(biāo)這種復(fù)雜的使用方法,因此它能通過
          SQL引擎產(chǎn)生更加優(yōu)化的解決方案,之所以如此,是由于游標(biāo)表達式相對于多個游標(biāo)使用多個SQL語句來說,它只使用了一個SQL語句。還有oracle9i中解除了嵌入到pl/sql代碼的的SQL中使用游標(biāo)表達式的限制。,現(xiàn)在可以把游標(biāo)表達式作為PL/SQL游標(biāo)的一部分使用

          ?

          ?

          ?


          ?

          posted on 2006-09-12 10:18 有貓相伴的日子 閱讀(1252) 評論(1)  編輯  收藏 所屬分類: pl/sql

          評論:
          # re: 游標(biāo)變量和隱藏游標(biāo) 2008-04-15 10:44 | zhangyc
          thanks  回復(fù)  更多評論
            
          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 剑阁县| 丰都县| 洮南市| 京山县| 雷山县| 泾阳县| 大冶市| 区。| 宣恩县| 调兵山市| 卢龙县| 崇明县| 梅州市| 扶风县| 黄浦区| 呈贡县| 长岭县| 江山市| 长海县| 黑龙江省| 安福县| 武宁县| 东莞市| 宁德市| 通辽市| 正定县| 都匀市| 怀集县| 新干县| 汽车| 富源县| 容城县| 定兴县| 北流市| 搜索| 连平县| 威信县| 沽源县| 松阳县| 宁陵县| 钟祥市|