PL SQL循环 - 在查询语句中将查询中的值用作变量

时间:2012-06-19 20:37:52

标签: sql oracle loops

寻求有关如何执行此操作的最佳建议:

我有一个这样的插页:

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...

我可以将它作为函数存储在包中,但我不确定如何开始构建这样的函数。提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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 - 根据需要替换。

分享并享受。