0

これを行う方法についての最善のアドバイスを探しています:

私はこのような挿入物を持っています:

insert into empty_table (
column_1,
column_2,
column_3,
column_4
)
(select
sequence_1.nextval,
v_variable_1,
v_variable_2,
value_1
from template_table
where some_value = "value 1");

select ステートメント自体は 22 個のレコードを返します。私がしたいのは、この挿入を反復処理し、次のような別のクエリからの値と等しい変数を設定することです。

select
variable_1,
variable_2
from table_with_var_values
where some_other_value = "value 2";

このクエリは約 180 レコードを返し、次のようになります。

variable_1    variable_2
------------------------
Abc           101         
Def           102         
Ghi           103         
Jkl           104
etc...

したがって、最終的な結果は、empty_table が 3,960 レコード (22 x 180) を保持し、次のようになります。

column_1    column_2    column_3    column_4
--------------------------------------------
1           Abc         101         Spring
2           Def         102         Summer
3           Ghi         103         Spring
4           Jkl         104         Fall
etc...

これを関数としてパッケージに格納できますが、このような関数の構造化を開始する方法がわかりません。助けてくれてありがとう。

4

1 に答える 1

2

次のように、2 つのクエリを組み合わせて INSERT を実行してみませんか。

insert into empty_table (column_1,          
                         column_2,          
                         column_3,          
                         column_4)   
  SELECT sequence_1.nextval,  
         t2.variable_1,
         t2.variable_2,
         tt.v_variable_1,  
    from template_table tt,
         table_with_var_values t2
    where tt.some_value = 'value 1' AND
          t2.some_other_value = 'value 2'

TEMPLATE_TABLE と TABLE_WITH_VAR_VALUES の間に結合基準がないため、両方のテーブルのすべての行が結合されるデカルト結合を取得する必要があります。それを取得するためにループする必要はありません。

template_table のどの列に「Spring」、「Summer」、「Fall」の値があるかわからないため、必要に応じて v_variable_1 を選択しました。

共有してお楽しみください。

于 2012-06-19T22:20:27.553 に答える