亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle 中 table 函數的應用淺析

2024-08-29 13:59:36
字體:
來源:轉載
供稿:網友

表函數可接受查詢語句或游標作為輸入參數,并可輸出多行數據。該函數可以平行執行,并可持續輸出數據流,被稱作管道式輸出。應用表函數可將數據轉換分階段處理,并省去中間結果的存儲和緩沖表。

1. 用游標傳遞數據

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

SELECT * FROM TABLE (myfunction (CURSOR (SELECT *         FROM mytab)));  

2. 利用兩個實體化視圖(或表)作為樣板數據

CREATE MATERIALIZED VIEW sum_sales_country_mvBUILD IMMEDIATEREFRESH COMPLETEENABLE QUERY REWRITEASSELECT SUBSTR (s.calendar_month_desc, 1, 4) YEAR, 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, 1, 4), c.country_id
CREATE MATERIALIZED VIEW sum_es_gend_mvBUILD DEFERREDREFRESH FASTENABLE QUERY REWRITEASSELECT SUBSTR (s.calendar_month_desc, 1, 4) YEAR,   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, 1, 4) = '2000'GROUP BY SUBSTR (s.calendar_month_desc, 1, 4),   s.calendar_month_desc,   c.cust_gender;

3. 定義對象類型和基于對象類型的表類型

定義對象類型并且為進一步引用做好準備。

(1)定義對象類型:TYPE sales_country_t

CREATE MATERIALIZED VIEW sum_es_gend_mvBUILD DEFERREDREFRESH FASTENABLE QUERY REWRITEASSELECT SUBSTR (s.calendar_month_desc, 1, 4) YEAR,   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, 1, 4) = '2000'GROUP BY SUBSTR (s.calendar_month_desc, 1, 4),   s.calendar_month_desc,   c.cust_gender;

(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_pkgI 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_tabIS 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 PIPELINEDIS 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 PIPELINEDIS in_rec cur%ROWTYPE; out_rec sales_country_t := sales_country_t (NULL, NULL, NULL);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_tabIS 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')));

以上所述是小編給大家介紹的Oracle 中 table 函數的應用淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品一区中文字幕乱码| 久久韩国免费视频| 91久久精品国产91性色| 中文字幕视频一区二区在线有码| 亚洲福利精品在线| 亚洲精品免费一区二区三区| 久久久久久久久久久久久久久久久久av| 亚洲色图50p| 国产精品久久久久久久久男| 日韩欧美有码在线| 欧美三级欧美成人高清www| 成人中文字幕+乱码+中文字幕| 欧美成人免费va影院高清| 欧美性生交大片免费| 精品露脸国产偷人在视频| 成人天堂噜噜噜| 欧美大肥婆大肥bbbbb| 亚洲精品中文字幕有码专区| 欧美有码在线视频| 亚洲无亚洲人成网站77777| 国产精品揄拍500视频| 欧美老女人xx| 亚洲欧美日韩另类| 欧美性感美女h网站在线观看免费| 欧美大全免费观看电视剧大泉洋| 久久99国产综合精品女同| 国产精品久久久久久久久| 九九综合九九综合| 在线观看国产成人av片| 久久精品国产综合| 韩曰欧美视频免费观看| 欧美成在线观看| 亚洲va欧美va国产综合久久| 福利视频第一区| 夜夜嗨av一区二区三区四区| 久久国产精品免费视频| 中文字幕精品在线视频| 欧美香蕉大胸在线视频观看| 久久久久久久国产| 中文字幕日韩综合av| 亚洲va欧美va在线观看| 中文国产亚洲喷潮| 亚洲国产日韩欧美在线99| 国产在线观看精品| 91九色视频在线| 久久91亚洲精品中文字幕| 亚洲成人av在线| 狠狠躁夜夜躁久久躁别揉| 亚洲高清久久网| 日本精品久久久| 国产精品成人va在线观看| 91久久精品国产91久久| 一夜七次郎国产精品亚洲| 久久精品国产69国产精品亚洲| 亚洲人精选亚洲人成在线| 精品亚洲一区二区三区在线播放| 久久久这里只有精品视频| 国产精品h片在线播放| 国产婷婷97碰碰久久人人蜜臀| 亚洲一区二区三区777| 91网站在线免费观看| 精品欧美一区二区三区| 成人国内精品久久久久一区| 国产精品永久免费在线| 中文字幕亚洲综合久久| 国产成人精品优优av| 欧美精品做受xxx性少妇| 日韩女在线观看| 日韩av网站大全| 成人疯狂猛交xxx| 亚洲精品理论电影| 久久国产色av| 中文字幕综合一区| 久久视频在线视频| 欧美国产极速在线| 中文字幕久热精品视频在线| 欧美在线影院在线视频| 1769国产精品| 免费不卡欧美自拍视频| 精品国产福利在线| 欧美精品生活片| 欧美精品九九久久| 91产国在线观看动作片喷水| 日韩在线观看免费高清完整版| 久久夜色精品国产欧美乱| 国产日韩欧美夫妻视频在线观看| 久久国内精品一国内精品| 91精品国产自产91精品| 欧美性猛交99久久久久99按摩| 亚洲视频自拍偷拍| 中文字幕在线视频日韩| 精品亚洲一区二区| 国产精品高潮粉嫩av| 一区二区三区回区在观看免费视频| 亚洲综合av影视| 国产一区二区三区在线看| 色偷偷av一区二区三区乱| 92裸体在线视频网站| 精品亚洲精品福利线在观看| 国产精品99一区| 日本高清不卡的在线| 欧美午夜性色大片在线观看| 国产午夜精品美女视频明星a级| 亚洲精品视频久久| 亚洲日本成人女熟在线观看| 欧美一区亚洲一区| 亚洲国产美女精品久久久久∴| 日韩视频精品在线| 最近2019中文字幕mv免费看| 久久中文久久字幕| 91影院在线免费观看视频| 成人h视频在线观看播放| 久久精品视频在线观看| 91午夜在线播放| 91日本视频在线| 91久久精品国产91久久性色| 日韩久久免费视频| 色综合久久88色综合天天看泰| 国产精品尤物福利片在线观看| 欧美自拍视频在线| 亚洲成av人乱码色午夜| 国产欧美一区二区三区久久| 久久综合久中文字幕青草| 国产日本欧美在线观看| 日韩高清免费观看| 欧美精品九九久久| 亚洲欧美日韩一区二区在线| 日韩中文字幕视频在线| 日韩精品高清在线观看| 亚洲欧洲美洲在线综合| 国产精品成人播放| 91地址最新发布| 欧美精品福利视频| 欧美激情区在线播放| 91免费视频网站| 国产精品久久久久久久天堂| 欧美大尺度电影在线观看| 国产伦精品一区二区三区精品视频| 欧美日韩国产精品一区二区三区四区| 亚洲精品99久久久久中文字幕| 亚洲色图在线观看| 亚洲国产古装精品网站| 亚洲精品美女在线观看播放| 日韩中文在线中文网在线观看| 欧美老少配视频| 日韩精品视频免费专区在线播放| 欧美激情欧美激情| 欧美老少做受xxxx高潮| 美女视频久久黄| 日韩经典一区二区三区| 欧美国产日韩中文字幕在线| 欧美激情视频网址| 一本大道香蕉久在线播放29| 欧美电影在线观看网站| 亚洲国产古装精品网站| 欧美一级视频一区二区| 国产小视频国产精品| 亚洲电影免费在线观看| 中文字幕亚洲无线码在线一区| 亚洲欧美国产日韩中文字幕| 岛国视频午夜一区免费在线观看| 中文字幕一区电影| 国产视频丨精品|在线观看| 丝袜一区二区三区|