テーブル関數(shù)はクエリステートメントまたはカーソルを入力パラメータとして受け入れることができ、複數(shù)行のデータを出力できます。この関數(shù)は並列実行でき、データのストリームを連続的に出力します。これはパイプライン出力と呼ばれます。テーブル?ファンクションを適用すると、データ変換が段階的に処理され、中間結(jié)果のテーブルの保管およびバッファリングが不要になります。
1. カーソルを使用してデータを渡します
カーソル REF CURSOR を使用してデータセット (複數(shù)行レコード) を PL/SQL 関數(shù)に渡します:
SELECT * FROM TABLE (myfunction (CURSOR (SELECT * FROM mytab)));
2. 2 つのマテリアライズド ビュー (またはテーブル) をテンプレートとして使用します。データ
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. オブジェクト タイプとテーブル タイプをオブジェクト タイプに基づいて定義する
オブジェクト タイプを定義し、さらなる?yún)⒄栅螠蕚浃颏筏蓼埂?
(1) オブジェクトタイプを定義します: TYPE sales_country_t
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;
(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
れー
(4) テーブルタイプを定義します: TYPE SUM_SALES_GENDER_T_TAB
CREATE TYPE sales_gender_t AS OBJECT ( YEAR VARCHAR2 (4), country_id CHAR (2), cust_gender CHAR (1), sum_amount_sold NUMBER );
(5) オブジェクトタイプを定義します: TYPE sales_roll_t
CREATE TYPE sum_sales_gender_t_tab AS TABLE OF sales_gender_t;
(6) テーブルタイプを定義します: TYPE SUM_ SALES_ROLL_T_TAB
りぃ
(7) 作成した型を確認する
CREATE TYPE sales_roll_t AS OBJECT ( channel_desc VARCHAR2 (20), country_id CHAR (2), sum_amount_sold NUMBER );
4. パッケージを作成し、REF CURSORを定義する
(1) テーブル関數(shù)を定義する: FUNCTION Table _Ref_Cur_Week
CREATE TYPE sum_sales_roll_t_tab AS TABLE OF sales_roll_t;
(2) テーブル関數(shù)の定義: FUNCTION Table_Ref_Cur_Strong
SELECT object_name, object_type, status FROM user_objects WHERE object_type = 'TYPE';
(3) テーブル関數(shù)の定義: FUNCTION Table_Ref_Cur_row
CREATE OR REPLACE PACKAGE cursor_pkg I 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;
(4) テーブル関數(shù)の定義: FUNCTION Gender_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; /
6. テーブル関數(shù)の呼び出し
次の SQL クエリ ステートメントは、定義されたテーブル関數(shù)を呼び出します。
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; /
上記は、編集者が紹介した Oracle のテーブル関數(shù)のアプリケーションの簡単な分析です。ご質(zhì)問があれば、メッセージを殘してください。編集者が返信します。時間。また、PHP 中國語 Web サイトをサポートしていただきありがとうございます。
Oracle でのテーブル関數(shù)のアプリケーションに関するその他の記事については、PHP 中國語 Web サイトに注目してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)