質問

って変換するクエリのように以下の種類のような利用GTT:

insert into my_gtt_table_1
(house, lname, fname, MI, fullname, dob)
(select house, lname, fname, MI, fullname, dob 
 from (select 'REG' house, mbr_last_name lname, mbr_first_name fname, mbr_mi MI, 
       mbr_first_name || mbr_mi || mbr_last_name fullname, mbr_dob dob from 
       table_1 a, table_b
       where a.head = b.head and mbr_number = '01' and mbr_last_name = v_last_name) c

上記はサンプルが複雑なクエリーは大きい。
上記は、内部に記憶されている。そのgtt(my_gtt_table_1).かったので、下

create or replace type lname_row as object
    (
     house varchar2(30)
     lname varchar2(30),
     fname varchar2(30),
     MI char(1),
     fullname VARCHAR2(63),
     dob DATE
     )

create or replace type lname_exact as table of lname_row 

現在のSP:

type lname_exact is table of <what_table_should_i_put_here>%rowtype;
tab_a_recs lname_exact;

上記までお問い合わせくださいテーブルに置としての私のクエリは、ネストしたサブクエリ.

クエリのSP:(今はこのサンプルの目的もしくは作品)

        select lname_row('',
                                '',
                                '',
                                '',
                                '',
                                '',
                                sysdate) bulk collect
          into tab_a_recs
        from table_1;

んのようなエラー:オーラ-00913:多くの価値観

思ったよりずっと混乱した(

役に立ちましたか?

解決

定義型の 6 属性しいインスタンスを生成で 7 値です。えてしまうことではなく:

    select lname_row(/*'',*/
                     '',
                     '',
                     '',
                     '',
                     '',
                     sysdate) bulk collect
      into tab_a_recs
    from table_1;

編集 もあるよう混乱に関する。Oracleを定義できるの種類アプリケーションまたはPL/SQL.SQLのタイプaccessibles SQL(!) がPL/SQLのものをご提供が特徴が見えない純粋なSQL(PL/SQLでのアクセスのSQL型).

とはいうものの、もともとで混乱とは賢明の名称の種類のどちらも同じアプリケーションで、PL/SQL(せ シャドーイング 困難な状況にあると思います。を定義し、 lname_exact 型二回(CREATEステートメントや宣言する。しておりますのでスをインスタンス化し lname_exact で、SQLのタイプを選択この場合はSQL型(6属性).

だから削除宣言 lname_exact のSPは変更できます。

他のヒント

ヴィンセントの優れた答えに加えて:あなたは明示的に自分のSQLクエリでlname_rowを作成する必要はありません。 BULK COLLECTは自動的INTOターゲットのフィールドで選択した列に一致します。だから、あなたがこれまでに示してきたものをもとに、あなたは自分のPL / SQLブロックでそれらを定義する必要があり、スキーマ・レベルで型を作成する必要はありません。

ここで働く簡単な例があります:

SQL> l
  1  declare
  2    type my_row is record (x number, y date);
  3    type my_tab is table of my_row;
  4    a_table  my_tab;
  5  begin
  6  select 1,sysdate
  7      bulk collect into a_table
  8      from dual;
  9  dbms_output.put_line(a_table(1).y);
 10* end;
SQL> /
14-JUN-10
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top