<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    姿姿霸霸~~!
    貴在堅持!
    posts - 106,  comments - 50,  trackbacks - 0

            TABLE函數(shù)可接受查詢語句或游標作為輸入?yún)?shù),并可輸出多行數(shù)據(jù)。該函數(shù)可以平行執(zhí)行,并可持續(xù)輸出數(shù)據(jù)流,被稱作管道式輸出。應用TABLE函數(shù)可將數(shù)據(jù)轉(zhuǎn)換分階段處理,并省去中間結(jié)果的存儲和緩沖表.
            TABLE函數(shù)(它是9i中的新特性),實際上是將一個存儲在內(nèi)存中的對象(以流的方式存儲的)結(jié)構(gòu)化以后,使這個對象能以表的方式查詢。他對流對象的結(jié)構(gòu)化轉(zhuǎn)換就決定的它的效率大大遜于對普通表和臨時表的查詢效率.
            TABLE函數(shù)可接受查詢語句或游標作為輸入?yún)?shù),并可輸出多行數(shù)據(jù)。該函數(shù)可以平行執(zhí)行,并可持續(xù)輸出數(shù)據(jù)流,被稱

    1. 用游標傳遞數(shù)據(jù)
    利用游標 REF CURSOR 可將數(shù)據(jù)集(多行記錄)傳遞到PL/SQL函數(shù):

    1SELECT *
    2  FROM TABLE (myfunction (CURSOR (SELECT *
    3                                    FROM mytab)));

    2.利用兩個實體化視圖(或表)作為樣板數(shù)據(jù)
    CREATE MATERIALIZED VIEW sum_sales_country_mv
    BUILD IMMEDIATE
    REFRESH COMPLETE
    ENABLE QUERY REWRITE
    AS
    SELECT   SUBSTR (s.calendar_month_desc, 14YEAR, c.country_id country,
             
    SUM (sum_amount_sold) sum_amount_sold
        
    FROM sum_sales_month_mv s, customers c
       
    WHERE s.cust_id = c.cust_id
         
    AND c.country_id IN ('US''UK''FR''ES''JP''AU')
    GROUP BY SUBSTR (s.calendar_month_desc, 14), c.country_id;

    CREATE MATERIALIZED VIEW sum_es_gend_mv
    BUILD DEFERRED
    REFRESH FAST
    ENABLE QUERY REWRITE
    AS
    SELECT   SUBSTR (s.calendar_month_desc, 14YEAR,
             s.calendar_month_desc cal_month, c.cust_gender,
             
    SUM (sum_amount_sold) sum_amount_sold
        
    FROM sum_sales_month_mv s, customer c
       
    WHERE s.cust_id = c.cust_id
         
    AND c.country_id = 'ES'
         
    AND sunstr (s.calendar_month_desc, 14= '2000'
    GROUP BY SUBSTR (s.calendar_month_desc, 14),
             s.calendar_month_desc,
             c.cust_gender;

    3.定義對象類型和基于對象類型的表類型
    定義對象類型并且為進一步引用做好準備
    (1)定義對象類型:
    CREATE TYPE sales_country_t AS OBJECT (
       
    YEAR              VARCHAR2 (4),
       country           
    CHAR (2),
       sum_amount_sold   
    NUMBER
    );

    (2)定義表類型:TYPE SUM_SALES_COUNTRY_T_TAB
    CREATE TYPE sum_sales_country_t_tab AS TABLE OF sales_country_t;

    (3)定義對象類型:TYPE sales_gender_t

    CREATE TYPE sales_gender_t AS OBJECT (
       
    YEAR              VARCHAR2 (4),
       country_id        
    CHAR (2),
       cust_gender       
    CHAR (1),
       sum_amount_sold   
    NUMBER
    );

    (4)定義表類型:TYPE SUM_SALES_GENDER_T_TAB
    CREATE TYPE sum_sales_gender_t_tab AS TABLE OF sales_gender_t;

    (5)定義對象類型:TYPE sales_roll_t

    CREATE TYPE sales_roll_t AS OBJECT (
       channel_desc      
    VARCHAR2 (20),
       country_id        
    CHAR (2),
       sum_amount_sold   
    NUMBER
    );

    (6)定義表類型:TYPE SUM_SALES_ROLL_T_TAB
    CREATE TYPE sum_sales_roll_t_tab AS TABLE OF sales_roll_t;

    (7)檢查一下建立的類型:
    SELECT object_name, object_type, status
      
    FROM user_objects
     
    WHERE object_type = 'TYPE';

    4.定義包:
    Create package and define REF CURSOR
    CREATE OR REPLACE PACKAGE cursor_pkg
    IS
       TYPE sales_country_t_rec 
    IS RECORD (
          
    YEAR              VARCHAR (4),
          country           
    CHAR (2),
          sum_amount_sold   
    NUMBER
       );

       TYPE sales_gender_t_rec 
    IS RECORD (
          
    YEAR              VARCHAR2 (4),
          country_id        
    CHAR (2),
          cust_gender       
    CHAR (1),
          sum_amount_sold   
    NUMBER
       );

       TYPE sales_roll_t_rec 
    IS RECORD (
          channel_desc      
    VARCHAR2 (20),
          country_id        
    CHAR (2),
          sum_amount_sold   
    NUMBER
       );

       TYPE sales_country_t_rectab 
    IS TABLE OF sales_country_t_rec;

       TYPE sales_roll_t_rectab 
    IS TABLE OF sales_roll_t_rec;

       TYPE strong_refcur_t 
    IS REF CURSOR
          
    RETURN sales_country_t_rec;

       TYPE row_refcur_t 
    IS REF CURSOR
          
    RETURN sum_sales_country_mv%ROWTYPE;

       TYPE roll_refcur_t 
    IS REF CURSOR
          
    RETURN sales_roll_t_rec;

       TYPE refcur_t 
    IS REF CURSOR;
    END corsor_pkg;

    5. 定義表函數(shù)
    (1)定義表函數(shù):FUNCTION Table_Ref_Cur_Week
    CREATE OR REPLACE FUNCTION table_ref_cur_week (cur CURSOR.refcur_t)
       
    RETURN sum_sales_country_t_tab
    IS
       
    YEAR              VARCHAR (4);
       country           
    CHAR (2);
       sum_amount_sold   
    NUMBER;
       objset            sum_sales_country_t_tab :
    = sum_sales_country_t_tab ();
       i                 
    NUMBER                  := 0;
    BEGIN
       LOOP
    -- Fetch from cursor variable
          FETCH cur
           
    INTO YEAR, country, sum_amount_sold;

          
    EXIT WHEN cur%NOTFOUND;
                           
    -- exit when last row is fetched
    --
     append to collection
          i := i + 1;
          objset.EXTEND;
          objset (i) :
    = sales_country_t (YEAR, country, sum_amount_sold);
       
    END LOOP;

       
    CLOSE cur;

       
    RETURN objset;
    END;

    (2)定義表函數(shù):FUNCTION Table_Ref_Cur_Strong
    CREATE OR REPLACE FUNCTION table_ref_cur_strong (cur cursor_pkg.strong_refcur_t)
       
    RETURN sum_sales_country_t_tab PIPELINED
    IS
       
    YEAR              VARCHAR (4);
       country           
    CHAR (2);
       sum_amount_sold   
    NUMBER;
       i                 
    NUMBER      := 0;
    BEGIN
       LOOP
          
    FETCH cur
           
    INTO YEAR, country, sum_amount_sold;

          
    EXIT WHEN cur%NOTFOUND;                   -- exit when last row fetched
          PIPE ROW (sales_country_t (YEAR, country, sum_amount_sold));
       
    END LOOP;

       
    CLOSE cur;

       
    RETURN;
    END;

    (3)定義表函數(shù):FUNCTION Table_Ref_Cur_row
    CREATE OR REPLACE FUNCTION table_ref_cur_row (cur cursor_pkg.row_refcur_t)
       
    RETURN sum_sales_country_t_tab PIPELINED
    IS
       in_rec    cur
    %ROWTYPE;
       out_rec   sales_country_t :
    = sales_country_t (NULLNULLNULL);
    BEGIN
       LOOP
          
    FETCH cur
           
    INTO in_rec;

          
    EXIT WHEN cur%NOTFOUND;                -- exit when last row is fetched
          out_rec.YEAR := in_rec.YEAR;
          out_rec.country :
    = in_rec.country;
          out_rec.sum_amount_sold :
    = in_rec.sum_amount_sold;
          
    PIPE ROW (out_rec);
       
    END LOOP;

       
    CLOSE cur;

       
    RETURN;
    END;

    (4)定義表函數(shù):FUNCTION Gender_Table_Ref_Cur_Week
    CREATE OR REPLACE FUNCTION gender_table_ref_cur_week (cur cursor_pkg.refcur_t)
       
    RETURN sum_sales_gender_t_tab
    IS
       
    YEAR              VARCHAR2 (4);
       country_id        
    CHAR (2);
       cust_gender       
    CHAR (1);
       sum_amount_sold   
    NUMBER;
       objset            sum_sales_gender_t_tab :
    = sum_sales_gender_t_tab ();
       i                 
    NUMBER                 := 0;
    BEGIN
       LOOP
          
    FETCH cur
           
    INTO YEAR, country_id, cust_gender, sum_amount_sold;

          
    EXIT WHEN cur%NOTFOUND;                -- exit when last row is fetched
          i := i + 1;
          objset.EXTEND;
          objset (i) :
    =
              sum_sales_gender_t (
    YEAR, country_id, cust_gender, sum_amount_sold);
       
    END LOOP;

       
    CLOSE cur;

       
    RETURN objset;
    END;

     

    6. 調(diào)用表函數(shù)
    下列 SQL 查詢語句調(diào)用已被定義的表函數(shù)。

    SELECT *
      
    FROM TABLE (table_ref_cur_week (CURSOR (SELECT *
                                                
    FROM sum_sales_country_mv)));

    SELECT *
      
    FROM TABLE (table_ref_cur_strong (CURSOR (SELECT *
                                                  
    FROM sum_sales_country_mv)));

    SELECT *
      
    FROM TABLE (table_ref_cur_row (CURSOR (SELECT *
                                               
    FROM sum_sales_country_mv)));

    SELECT *
      
    FROM TABLE (table_ref_cur_week (CURSOR (SELECT *
                                                
    FROM sum_sales_country_mv
                                               
    WHERE country = 'AU')));


     

    posted on 2010-12-19 22:53 xrzp 閱讀(1690) 評論(1)  編輯  收藏 所屬分類: oracle-基礎(chǔ)

    FeedBack:
    # re: 什么是table函數(shù)(收集)
    2012-11-29 10:57 | Jcat
    也就是說,我好不容易達到了你2年前的水平  回復  更多評論
      

    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    好友的blog

    搜索

    •  

    積分與排名

    • 積分 - 118085
    • 排名 - 499

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费播放美女一级毛片| 在线免费视频一区| 国产亚洲男人的天堂在线观看 | 久久精品国产99国产精品亚洲| 亚洲人成无码网站久久99热国产| 久久久久久久免费视频| 成人免费ā片在线观看| 亚洲AV第一成肉网| 亚洲国产电影在线观看| 久久亚洲国产午夜精品理论片| 国产真人无遮挡作爱免费视频 | 亚洲无码日韩精品第一页| 中文字幕影片免费在线观看| 免费在线看黄网站| 一级做a爱过程免费视| 亚洲色www永久网站| 亚洲福利一区二区精品秒拍| 亚洲精品乱码久久久久久蜜桃不卡| 国产一区二区三区免费视频| 最新猫咪www免费人成| 182tv免费视视频线路一二三| 国产成人免费ā片在线观看老同学 | 乱淫片免费影院观看| 亚洲男人的天堂网站| 亚洲一区在线观看视频| 亚洲自偷精品视频自拍| 亚洲va无码专区国产乱码| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲av无码久久忘忧草| 久久精品国产亚洲av四虎| 亚洲乱码中文字幕综合| 久久精品国产精品亚洲人人| 九月婷婷亚洲综合在线| 免费一级毛片正在播放| 免费一级成人毛片| 四虎AV永久在线精品免费观看| 日本免费一本天堂在线| 日韩免费高清一级毛片在线| 国内自产拍自a免费毛片| 日韩毛片免费在线观看| 成年女人永久免费观看片|