<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函數可接受查詢語句或游標作為輸入參數,并可輸出多行數據。該函數可以平行執行,并可持續輸出數據流,被稱作管道式輸出。應用TABLE函數可將數據轉換分階段處理,并省去中間結果的存儲和緩沖表.
            TABLE函數(它是9i中的新特性),實際上是將一個存儲在內存中的對象(以流的方式存儲的)結構化以后,使這個對象能以表的方式查詢。他對流對象的結構化轉換就決定的它的效率大大遜于對普通表和臨時表的查詢效率.
            TABLE函數可接受查詢語句或游標作為輸入參數,并可輸出多行數據。該函數可以平行執行,并可持續輸出數據流,被稱

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

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

    2.利用兩個實體化視圖(或表)作為樣板數據
    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. 定義表函數
    (1)定義表函數: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)定義表函數: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)定義表函數: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)定義表函數: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. 調用表函數
    下列 SQL 查詢語句調用已被定義的表函數。

    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 閱讀(1685) 評論(1)  編輯  收藏 所屬分類: oracle-基礎

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

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

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    好友的blog

    搜索

    •  

    積分與排名

    • 積分 - 117282
    • 排名 - 500

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品美女免费视频观看| 亚洲乱码国产一区网址| www.亚洲色图.com| **真实毛片免费观看| 国产一二三四区乱码免费| 中文字幕亚洲综合小综合在线| 亚洲va无码专区国产乱码| 亚洲 无码 在线 专区| 香蕉视频在线观看免费国产婷婷| 18禁男女爽爽爽午夜网站免费| 精品久久久久久无码免费| mm1313亚洲国产精品无码试看| 亚洲一区在线观看视频| 亚洲免费在线视频| 亚洲AV无码久久精品色欲| 亚洲美女高清一区二区三区| 精品少妇人妻AV免费久久洗澡| 久九九精品免费视频| 无码人妻丰满熟妇区免费| a在线视频免费观看| 中文字幕不卡免费视频| 一本岛v免费不卡一二三区| 农村寡妇一级毛片免费看视频| 精品久久久久亚洲| 日日摸日日碰夜夜爽亚洲| 亚洲国产精品无码观看久久| 亚洲一本到无码av中文字幕| 亚洲av极品无码专区在线观看| 亚洲美女色在线欧洲美女| 又色又污又黄无遮挡的免费视 | 浮力影院亚洲国产第一页| 国产一区在线观看免费| 国产精品免费视频网站| 国产一级一片免费播放i| 国产一精品一aⅴ一免费| 亚洲国产av一区二区三区| 亚洲国产精品第一区二区三区 | 成年免费a级毛片免费看无码| 国产成人1024精品免费| 黄桃AV无码免费一区二区三区| 岛国岛国免费V片在线观看|