我有一个SQL查询表:
表A
ID DESCRITION SQL
1 Test1 select count(*) from test1 group by..
2 Test2 select count(*) from test2 group by..
3 Test3 select count(*) from test3 group by..
我想执行select from TABLE_A.SQL列,并在inserts语句中使用结果来填充另一个表。含义:
insert into TABLE_B (TABLE_A.Description for ID=1, TABLE_A.SQL_RESULT for ID=1)
insert into TABLE_B (TABLE_A.Description for ID=2, TABLE_A.SQL_RESULT for ID=2)
insert into TABLE_B (TABLE_A.Description for ID=3, TABLE_A.SQL_RESULT for ID=3)
在不清楚我如何可以做到这一点使用PLSQL块。
1条答案
按热度按时间dxxyhpgq1#
为此,您需要动态SQL。
表格:
程序:
结果:
如果
select
语句真的包含group by
子句,那么result就不仅仅是一个值,而是它们的集合。例如:在这种情况下,它仍然是动态SQL,但
into
子句的时间目标不是标量变量,而是集合:程序:
结果:
[编辑,基于您的评论]
当然,当查询返回多个行时,您可以“连接”结果(并且您不希望向
table_B
插入多行,这是我前面的示例所做的)。在这种情况下,一个选择是使用listagg
函数。此外,table_b
的result
列不能再是number
。[另一个编辑,基于新评论]
如果你想在查询中包含额外的列,最简单的选择是在
select
语句中预先连接它们。如下所示:l_coll
现在是sys.odcivarchar2list
(以前是sys.odcinumberlist
,因为它只包含数字):结果: