1. <tfoot id="yceyu"><rt id="yceyu"></rt></tfoot>
          • <strike id="yceyu"><rt id="yceyu"></rt></strike>
          • 小程序員之歌
            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 閱讀(300) 評論(0)  編輯  收藏 所屬分類: 數據庫

            新用戶注冊  刷新評論列表  

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


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

            Powered by:
            BlogJava
            Copyright © liujg

            <2025年7月>
            日一二三四五六
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            • 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個好習慣()(809)
            • 2.?java 關閉IE(588)
            • 3.?OERR: ORA-12519(567)
            • 4.?doGet()和doPost()的區別(轉)(485)
            • 5.?看了下java核心技術中的代理,還是很暈(400)

            評論排行榜

            • 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_国产精品亚洲第五区在线_日本免费网站视频
            主站蜘蛛池模板: 乌兰察布市| 离岛区| 紫阳县| 海林市| 四子王旗| 荔浦县| 枞阳县| 珠海市| 夏河县| 班玛县| 收藏| 拜泉县| 桦川县| 寿阳县| 宝山区| 沛县| 日照市| 大冶市| 丹江口市| 同江市| 邢台市| 林周县| 安宁市| 金溪县| 卓资县| 会东县| 汕尾市| 新绛县| 乐陵市| 定州市| 吉安市| 吐鲁番市| 乐平市| 墨竹工卡县| 肥西县| 迭部县| 卓尼县| 冀州市| 客服| 文水县| 博野县|
          • <fieldset id="qowmm"><menu id="qowmm"></menu></fieldset>
            • <strike id="qowmm"><rt id="qowmm"></rt></strike>
              <strike id="qowmm"><input id="qowmm"></input></strike>