0

以下のようなサンプルクエリがあります。

INSERT INTO my_gtt_1 (fname, lname) (select fname, lname from users)

一時テーブルを削除するために、次のパッケージを作成しました。

create or replace package fname_lname AS

Type fname_lname_rec_type is record (
fname varchar(10),
lname varchar(10)
);

fname_lname_rec fname_lname_rec_type

Type fname_lname_tbl_type is table of fname_lname_rec_type;

function fname_lname_func
(
   v_fnam in varchar2, 
   v_lname in varchar2
)return fname_lname_tbl_type pipelined;

オラクルは初めてです...このパッケージの作成には長い時間がかかりました。しかし今、私はそれを取り除く方法を理解できませんmy_gtt_1

どのように私は言うことができます...

INSERT INTO <newly created package> (select fnma, name from users)
4

2 に答える 2

0

TABLE() 構文を使用して、パイプライン関数を呼び出す必要があります。

select * 
from table (select fname_lname.fname_lname_func(fnma, name) 
            from users
            where user_id = 123 )
/

USERS のサブクエリは、そのテーブルから単一の行を返さなければならないことに注意してください。

于 2010-06-13T20:01:56.253 に答える
0

パッケージに選択しません。コードで使用する場合は、テーブル型の変数を宣言し、その中に一括収集することができます。また、パイプライン関数の必要性についても質問します。グローバル一時テーブルを別のクエリの踏み台として使用している場合は、代わりに WITH 句を使用できます。特定の手法を推奨するには、全体像をよりよく把握する必要があります。グローバル一時テーブルも本質的に悪いものではありません。

于 2010-07-13T19:54:38.203 に答える