<strike id="osecc"></strike>
          • <tr id="osecc"><s id="osecc"></s></tr>
            <kbd id="osecc"><pre id="osecc"></pre></kbd>
            • 小程序員之歌
              java先(我應該為它寫點什么了?。?/div>

              PL/SQL中用光標查詢多條記錄

              一、 什么是光標

              Oracle 使用兩種光標:顯式光標和隱式光標。不管語句返回多少條紀錄, PL/SQL 為使用的每一條 UPDATE 、 DELETE 和 INSERT 等 SQL 命令隱式的聲明一個光標。(要管理 SQL 語句的處理,必須隱式的給它定義一個光標。)用戶聲明并使用顯示光標處理 SELECT 語句返回的多條記錄。顯示的定義光標一種結構,它使用戶能夠為特定的語句指定內存區域,以便以后使用。

              二、 光標的作用

              當 PL/SQL 光標查詢返回多行數據時,這些記錄組被稱為活動集。 Oracle 將這種活動集存儲在您創建的顯示定義的已命名的光標中。Oracle 光標是一種用于輕松的處理多行數據的機制,沒有光標, Oracle 開發人員必須單獨地、顯式地取回并管理光標查詢選擇的每一條記錄。

              光標的另一項功能事,它包含一個跟蹤當前訪問的記錄的指針,這使您的程序能夠一次處理多條記錄。

              三、 使用顯示光標的基本方法

              步驟如下:

              1 、聲明光標

              聲明光標的語法如下:

              DECLARE cursor_name

              Is

              SELECT statement

              其中, cursor_name 是您給光標指定的名稱; SELECT statement 是給光標活動集返回記錄的查詢。

              聲明光標完成了下面兩個目的:

              給光標命名;

              將一個查詢與光標關聯起來。

              值得注意的是,必須在 PL/SQL 塊的聲明部分聲明光標;給光標指定的名稱是一個未聲明的標識符,而不是一個 PL/SQL 變量,不能給光標名稱賦值,也不能將它用在表達式中。 PL/SQL 塊使用這個名稱來引用光標查詢。

              例: DECLARE

              CURSOR c1

              Is

              SELECT VIEW_NAME FROM ALL_VIEWS

              WHERE ROWNUM<=10 ;

              另外還可以在光標定義語句中聲明光標的參數,例:

              CURSOR c1 ( view _nbr number )

              Is

              SELECT VIEW_NAME FROM ALL_VIEWS

              WHERE ROWNUM<= view _nbr ;

              光標參數只對相應的光標是可見的,不能在光標范圍之外引用該光標的參數。如果試圖這樣做, Oracle 將返回一個錯誤,指出該變量沒有定義。

              2 、打開光標

              打開光標的語法如下:

              OPEN cursor_name ;

              其中 cursor_name 是您以前定義的光標名稱。

              打開光標將激活查詢并識別活動集,可是在執行光標取回命令之前,并沒有真正取回記錄。 OPEN 命令還初始化了光標指針,使其指向活動集的第一條記錄。光標被打開后,直到關閉之前,取回到活動集的所有數據都是靜態的,換句話說,光標忽略所有在光標打開之后,對數據執行的 SQL DML 命令( INSERT 、 UPDATE 、 DELETE 和 SELECT )。因此只有在需要時才打開它,要刷新活動集,只需關閉并重新打開光標即可。

              3 、從光標中取回數據

              FETCH 命令以每次一條記錄的方式取回活動集中的記錄。通常將 FETCH 命令和某種迭代處理結合起來使用,在迭代處理中, FETCH 命令每執行一次,光標前進到活動集的下一條記錄。

              FETCH 命令的語法:

              FETCH cursor_name INTO record_list ;

              其中, cursor_name 是前面定義的光標的名稱; record_list 是變量列表,它接受活動集中的列。 FETCH 命令將活動集的結果放置到這些變量中。

              執行 FETCH 命令后,活動集中的結果被取回到 PL/SQL 變量中,以便在 PL/SQL 塊中使用。每取回一條記錄,光標的指針就移向活動集的下一條記錄。

              例:

              FETCH C1 INTO VNAME;

              WHILE C1%FOUND LOOP

              DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME);

              END LOOP;

              其中,使用屬性 '%FOUND' 使得當 FETCH 到達活動集的結尾時,不會引發異常。其它屬性及含義見下表:

              屬性 含量

              %FOUND 布爾型屬性,當最近一次該記錄時成功返回,則值為 TRUE

              %NOTFOUND 布爾型屬性,它的值總與 %FOUND 屬性的值相反

              %ISOPEN 布爾型屬性,當光標是打開時返回 TRUE

              %ROWCOUNT 數字型屬性,返回已從光標中讀取的記錄數

              屬性 含量

              %FOUND 布爾型屬性,當最近一次該記錄時成功返回,則值為 TRUE

              %NOTFOUND 布爾型屬性,它的值總與 %FOUND 屬性的值相反

              %ISOPEN 布爾型屬性,當光標是打開時返回 TRUE

              %ROWCOUNT 數字型屬性,返回已從光標中讀取的記錄數

              4 、關閉光標

              CLOSE 語句關閉以前打開的光標,使得活動集不確定。當用戶的程序或會話結束時, Oracle 隱式關閉光標。光標被關閉后,就不能對它執行任何操作了 , 否則將引發異常。

              CLOSE 語句的語法是:

              CLOSE cursor_name ;

              其中, cursor_name 是以前打開的光標的名稱。

              完整的程序代碼如下:

              DECLARE

              CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS

              WHERE ROWNUM<=10

              ORDER BY VIEW_NAME;

              VNAME VARCHAR2(40);

              BEGIN

              OPEN C1;

              FETCH C1 INTO VNAME;

              WHILE C1%FOUND LOOP

              DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||''||VNAME);

              END LOOP;

              END;

              …… CLOSE C1;

              四、 小結

              光標是一種結構 , 能夠以一次一條記錄的方式處理多行查詢的結果 . 為每條 DML 語句創建隱式光標 , 而顯式光標是由用戶創建的 , 以便處理返回多條記錄的查詢。而且 , 通過消除反復地分析代碼 , 光標提高了代碼的處理速度。

              posted on 2008-03-17 15:55 liujg 閱讀(294) 評論(0)  編輯  收藏 所屬分類: 數據庫

              新用戶注冊  刷新評論列表  

              只有注冊用戶登錄后才能發表評論。


              網站導航:
              博客園   IT新聞   Chat2DB   C++博客   博問   管理
              相關文章:
              • (轉)pl/sql developer 中文字段顯示亂碼
              • (轉)Oracle Sequence Cache 參數說明
              • (轉)
              • (轉)表空間不足的問題
              • oracle 取子串(轉)
              • PL/SQL中用光標查詢多條記錄
              • 漫 談oracle 中 的 空 值(轉)
              • PowerDesigner 使用 (轉載)
              • SQL 查找重復記錄(轉)
               

              Powered by:
              BlogJava
              Copyright © liujg

              <2025年5月>
              日一二三四五六
              27282930123
              45678910
              11121314151617
              18192021222324
              25262728293031
              1234567

              導航

              • BlogJava
              • 首頁
              • 新隨筆
              • 聯系
              • 聚合
              • 管理

              統計

              • 隨筆 - 10
              • 文章 - 40
              • 評論 - 6
              • 引用 - 0

              常用鏈接

              • 我的隨筆
              • 我的評論
              • 我的參與
              • 最新評論

              留言簿(1)

              • 給我留言
              • 查看公開留言
              • 查看私人留言

              隨筆分類

              • js (rss)
              • linux(1) (rss)
              • strus2 (rss)
              • Struts2 Tag語法(轉) (rss)

              隨筆檔案

              • 2014年12月 (1)
              • 2011年9月 (1)
              • 2011年5月 (2)
              • 2011年1月 (1)
              • 2007年11月 (1)
              • 2007年10月 (1)
              • 2007年5月 (1)
              • 2006年12月 (1)

              文章分類

              • Java基礎(10) (rss)
              • JDBC(1) (rss)
              • js(1) (rss)
              • portlet(1) (rss)
              • Tapestry(1) (rss)
              • 數據庫(9) (rss)
              • 算法(1) (rss)

              文章檔案

              • 2011年10月 (1)
              • 2011年5月 (2)
              • 2011年1月 (1)
              • 2010年12月 (1)
              • 2010年8月 (1)
              • 2010年7月 (1)
              • 2010年5月 (2)
              • 2010年4月 (1)
              • 2009年7月 (1)
              • 2009年4月 (1)
              • 2009年3月 (2)
              • 2009年1月 (2)
              • 2008年12月 (1)
              • 2008年11月 (1)
              • 2008年7月 (3)
              • 2008年4月 (2)
              • 2008年3月 (2)
              • 2008年1月 (2)
              • 2007年11月 (3)
              • 2007年7月 (1)
              • 2007年6月 (4)
              • 2007年1月 (1)
              • 2006年7月 (4)

              相冊

              • me

              收藏夾

              • rmi(5) (rss)

              boddiy

              • boddi's blog

              搜索

              •  

              最新評論

              • 1.?re: oracle 取子串(轉)
              • @aaa
                別處轉來的,具體的不懂。
              • --liujg
              • 2.?re: oracle 取子串(轉)[未登錄]
              • 樓主,你說的substring是在oracle哪個版本的???能用嗎???
                charindex又是哪里的函數,能用嗎????搞笑
              • --aaa
              • 3.?re: oracle 取子串(轉)[未登錄]
              • kao
              • --aaa
              • 4.?re: prototype詳解(轉)
              • 郁悶,.NET的!,JAVA里面有MemberwiseClone這個方法么。怎么用JAVA搞原型模式呢?
              • --hehei
              • 5.?re: 轉載一篇jms的文章
              • Thanks for you kind to share the article~~
              • --lingruoxu

              閱讀排行榜

              • 1.?java程序員的5個好習慣()(807)
              • 2.?java 關閉IE(587)
              • 3.?OERR: ORA-12519(564)
              • 4.?doGet()和doPost()的區別(轉)(483)
              • 5.?看了下java核心技術中的代理,還是很暈(399)

              評論排行榜

              • 1.?執行./startup.sh,或者./shutdown.sh的時候,爆出了Permission denied(0)
              • 2.?submit()和onsubmit()的區別(轉)(0)
              • 3.?doGet()和doPost()的區別(轉)(0)
              • 4.?轉載 Vim 基本用法(0)
              • 5.?OERR: ORA-12519(0)
              狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频
              主站蜘蛛池模板: 巫山县| 监利县| 临高县| 祁门县| 工布江达县| 威信县| 阳信县| 新乡县| 栾川县| 九龙坡区| 鲁甸县| 台前县| 青浦区| 敖汉旗| 达日县| 米易县| 闸北区| 右玉县| 青浦区| 尖扎县| 宁武县| 嵩明县| 阳泉市| 日土县| 保德县| 永川市| 东光县| 沈丘县| 嘉禾县| 伊宁市| 普洱| 肇州县| 永城市| 进贤县| 定南县| 吴江市| 句容市| 神木县| 南充市| 丽江市| 梁山县|
              <samp id="k0woc"></samp>
              <samp id="k0woc"></samp><strike id="k0woc"></strike>