如何从oracle sql中的列值获取表名?

时间:2016-10-26 15:10:53

标签: sql oracle

我有一个主表,其中有两列包含表名和id。我的数据库中有表名的那些表。

例如,我找到特定的表名,选择id。然后我想用数据填充该名称的表。我想在一个查询中这样做。我怎么能这样做?

目标:一次填充所有表的数据,其名称与主表中的表名列中的值类似。

这就是我获取表格列表的方式。我应该循环一下。

select tbl from asp_tbl where asp in (
select id from (
SELECT * FROM DIMENSION WHERE EXTERNALKEY LIKE 'W16%')
);

然后我将尝试合并表中需要填充的其他表的数据:

 MERGE INTO  tbl  d 
            USING 
            (SELECT ? nums,     ? names from data_table) s 
           ON(d.product = s.product and d.ga = s.ga and d.metric_id = s.metric_id) 
            WHEN MATCHED THEN UPDATE SET d.names = s.names 
            WHEN NOT MATCHED THEN INSERT (nums, names)values(s.nums,s.names);

我是否提供了足够的信息?

1 个答案:

答案 0 :(得分:1)

根据我的理解,你需要一些存储过程,这可能会满足一些带有一些测试数据的表格。如果是这样,你可以写一些类似的东西:

create procedure fulfil_test_data (p_table_name varchar2) is 
begin 

for x IN (select tbl from asp_tbl where asp in (
SELECT table_id FROM DIMENSION WHERE EXTERNALKEY LIKE p_table_name )) loop 

   execute immediate 'insert into '|| x.tbl ||' (nums,  names) 
       select level , chr(ascci(''A'') + mod(level,26)) from dual connect by level < 1001'; 
end loop; 

end; 
/

并称之为

begin 
fulfil_test_data('W16%'); 
end;
/