日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle中table函数的应用

發(fā)布時(shí)間:2024/9/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中table函数的应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

表函數(shù)可接受查詢語句或游標(biāo)作為輸入?yún)?shù),并可輸出多行數(shù)據(jù)。該函數(shù)可以平行執(zhí)行,并可持續(xù)輸出數(shù)據(jù)流,被稱作管道式輸出。應(yīng)用表函數(shù)可將數(shù)據(jù)轉(zhuǎn)換分階段處理,并省去中間結(jié)果的存儲(chǔ)和緩沖表。

1。 用游標(biāo)傳遞數(shù)據(jù)
利用游標(biāo) REF CURSOR 可將數(shù)據(jù)集(多行記錄)傳遞到PL/SQL函數(shù):
SELECT
FROM TABLE (myfunction (CURSOR (SELECT
FROM mytab)));
2。 利用兩個(gè)實(shí)體化視圖(或表)作為樣板數(shù)據(jù)
CREATE MATERIALIZED VIEW sum_sales_country_mv
BUILD IMMEDIATE
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS
SELECT 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_mv
BUILD DEFERRED
REFRESH FAST
ENABLE QUERY REWRITE
AS
SELECT 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。 定義對(duì)象類型和基于對(duì)象類型的表類型
定義對(duì)象類型并且為進(jìn)一步引用做好準(zhǔn)備。
(1)定義對(duì)象類型:TYPE sales_country_t
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)定義對(duì)象類型: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)定義對(duì)象類型: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 (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)定義表函數(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‘)));

總結(jié)

以上是生活随笔為你收集整理的Oracle中table函数的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久新网址 | 日本中文字幕网 | 中国黄色录像 | 国产性猛交普通话对白 | 日本黄色免费网址 | 中文写幕一区二区三区免费观成熟 | 成人v片| 日韩怡红院 | 伊人久久久久久久久久久久 | 狼人色综合| 法国空姐在线观看视频 | 国产21区| 在线看片a| 激情五月色婷婷 | jizz少妇| 超碰国产在线 | 日日干日日干 | 欧美日韩高清免费 | av中文一区 | 日本爽爽爽爽爽爽在线观看免 | 五月婷婷丁香花 | 亚洲精品蜜桃 | 97久久精品人人澡人人爽 | 日韩国产在线一区 | 欧美美女网站 | 国产又粗又长又大 | 亚洲一区二区三区电影在线观看 | 干干干操操操 | 亚洲精品五月 | 丰满大乳国产精品 | 九九热在线免费视频 | 欧美日韩3p | 亚洲视频在线观看视频 | 日本中文字幕视频 | 一级免费观看 | 狼人综合视频 | 亚欧美色图 | 色偷偷网站 | www国产亚洲精品久久网站 | 色婷婷色婷婷 | 激情精品 | 亚洲欧美91| 四虎在线视频免费观看 | 亚洲欧美一区二区激情 | 在线观看免费观看 | 国产成人啪一区二区 | 欧美色偷偷 | 欧美日韩成人一区二区 | 精品人妻视频在线 | 精品爱爱| 久久人妻少妇嫩草av无码专区 | 一本一道久久综合 | av尤物| 50部乳奶水在线播放 | 成人综合婷婷国产精品久久 | 亚洲一区有码 | 黄色69视频| 亚洲一区二区三区视频在线 | 欧美无砖区 | 成色网 | 调教一区二区三区 | 色偷偷噜噜噜亚洲男人 | 久久久久久久久久久久久久久久久 | 亚洲成人午夜在线 | 国产成人一区二区三区影院在线 | 欧美视频在线免费看 | 五月激情六月婷婷 | 欧美日韩精品区 | 999在线视频| 狠狠视频 | 久久精品99久久 | 一区二区在线免费视频 | 亚洲va视频| 欧洲精品久久久久毛片完整版 | 亚洲一区二区三区电影 | 日日麻批免费视频播放 | 精品久久久久久无码人妻 | 人妻91麻豆一区二区三区 | 久久久蜜桃一区二区 | 国产精品外围 | 特黄三级又爽又粗又大 | 黄频网站在线观看 | caoporm超碰 | 爱情岛亚洲品质自拍极速福利网站 | 天天操中文字幕 | 少妇人妻精品一区二区三区 | 波多野结衣一区二区三区免费视频 | 96精品视频 | 久久九九免费 | 成人黄色短视频在线观看 | 国产肉体xxxx裸体784大胆 | 处破痛哭a√18成年片免费 | 肉丝美脚视频一区二区 | 亚洲天堂成人网 | 精品日韩一区二区 | 亚洲第6页 | 精品免费国产 | 蜜色视频 | 久久日本精品字幕区二区 |