• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            tbwshc

            tbw

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              95 Posts :: 8 Stories :: 3 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            Oracle臨時表在實際開發中的應用是本文我們主要要介紹的內容,我們知道,SQL Server 在編寫查詢式的存儲過程的時候,一直都令我為之贊嘆。Create procedure ps_procedure_name as select * from table; Select查詢語句可以作為SQL Server存儲過程的一部分,直接返回結果集。但在Oracle實現這種形式的存儲過程是不合語法的。

            為了達到這種目的,我們需要使用Oracle臨時表(這是其中一種解決方案)。

            Oracle數據庫除了可以保存永久表外,還可以建立臨時表temporary tables。Oracle臨時表分為會話級臨時表(ON COMMIT PRESERVE ROWS)和事務級臨時表(ON COMMIT DELETE ROWS)。tb會話級臨時表是指臨時表中的數據只在會話生命周期之中存在,當用戶退出會話結束的時候,Oracle自動清除臨時表中數據。

            事務級臨時表是指臨時表中的數據只在事務生命周期中存在。當一個事務結束(commit or rollback),Oracle自動清除臨時表中數據。臨時表中的數據只對當前Session有效,每個Session都有自己的臨時數據,并且不能訪問其它Session的臨時表中的數據。

            //在數據庫建立一個臨時表:

             

            1. CREATE GLOBAL TEMPORARY TABLE ESPS.ESPS_EMP_RANK_TEMP  
            2. (  
            3. COM                VARCHAR2(20 BYTE),  
            4. EMPNO             VARCHAR2(20 BYTE),  
            5. EMPNAME          VARCHAR2(100 BYTE),  
            6. DEPTNAME         VARCHAR2(300 BYTE),  
            7. AMOUNT            NUMBER,  
            8. APPROVED_AMOUNT  NUMBER,  
            9. FOLDING_AMOUNT   NUMBER,  
            10. BENEFIT          NUMBER,  
            11. EXECUTED_RATE    NUMBER,  
            12. FOLDING_RANK     NUMBER,  
            13. BENEFIT_RANK     NUMBER,  
            14. RANK             NUMBER,  
            15. TOTAL_RANK       NUMBER  
            16. )  
            17. //ON COMMIT PRESERVE ROWS         --這里代表的是事務級臨時表  
            18. ON COMMIT PRESERVE ROWS          --這里代表的是會話級臨時表 

             

            在實際的操作中,我就驗證過上面所說的。一開始我使用了事務級臨時表,將數據插入到臨時表時,使用commit操作,結果臨時表的內容清空了。例如是:INSERT INTO ESPS_EMP_RANK_TEMP select * from table;commint;執行這兩段SQL后,相當于沒有插入數據。

            如果我們使用會話級臨時表,即使使用了commit,臨時表中的內容還是存在的。直到會話斷開時,臨時表中的內容才真正的清空。所以,在實際的開發過程中,我們因該結合場景,使用不同類型的臨時表。

            在建議提案系統開發的過程中,我使用了會話級的臨時表。將查詢的數據插入到臨時表中,并且讀取臨時表的內容,會話斷開時,臨時表中的內容自動清空。 

            在C#里面調用的三大步驟:

            //C#里面定義的一個String類型的變量,存儲一段動態SQL,存儲過程為:

            1. ESPS_EMP_RANK_STATISTIS({0},'{1}')  
            2. public static string I_EMP_RANK_STATISTIS = "BEGIN ESPS_EMP_RANK_STATISTIS({0},'{1}'); END;"

             

            //執行存儲過程,把結果集插入到臨時表ESPS_EMP_RANK_TEMP

             

            1. WAF.COM.Core.OracleHelper. ExecuteNonQuery(conn, CommandType.Text, string.Format(SqlCollector.I_EMP_RANK_STATISTIS, 2,’2011’)); 

             

            //讀取臨時表中保存的結果集

             

            1. Oracle DataReader dr = WAF.COM.Core.OracleHelper. ExecuteReader(“select * from ESPS_EMP_RANK_TEMP”) 

             

            關于Oracle臨時表在實際開發中的應用的相關知識就介紹到這里了,希望本次介紹能夠對您有所收獲!

            posted on 2012-07-08 10:49 tbwshc 閱讀(939) 評論(0)  編輯 收藏 引用 所屬分類: oracle
            久久久久国产一级毛片高清板| 99久久精品国产麻豆| 2020最新久久久视精品爱 | 久久夜色精品国产亚洲av| 国产 亚洲 欧美 另类 久久| 日产久久强奸免费的看| 亚洲成av人片不卡无码久久 | 无码国内精品久久人妻蜜桃| 久久久亚洲欧洲日产国码二区| 国产91久久精品一区二区| 99国产欧美久久久精品蜜芽| 欧美亚洲国产精品久久蜜芽| 久久午夜福利无码1000合集| aaa级精品久久久国产片| 久久人人爽人人爽人人片AV麻豆 | 久久国产免费观看精品3| 国产一区二区三区久久精品| 亚洲国产成人精品无码久久久久久综合 | 热久久视久久精品18| 欧美牲交A欧牲交aⅴ久久| 久久久久久亚洲精品无码| 久久婷婷激情综合色综合俺也去| 久久久精品国产亚洲成人满18免费网站| 久久精品国产亚洲AV不卡| 无遮挡粉嫩小泬久久久久久久| 免费精品久久久久久中文字幕| 国产亚洲精久久久久久无码| 久久久久久久久久久久久久| 伊人久久免费视频| 久久成人国产精品二三区| 久久亚洲精品中文字幕| 久久国产精品无| 国产成人久久精品一区二区三区| 亚洲午夜精品久久久久久app| 国产三级精品久久| 亚洲国产精品久久久久网站 | 国产精品内射久久久久欢欢| 国产A级毛片久久久精品毛片| 久久精品国产亚洲av麻豆蜜芽| 中文字幕无码久久人妻| 热久久视久久精品18|