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

为什么不将这两个查询结合起来进行 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 回答