我想在存储过程中用作某些SQL一部分的物化视图的名称保存在一个表中。我需要获取存储在变量中的表的名称,以便该过程可以使用它。将接收表名称的部分位于for循环中。如何在循环中使用变量?
这是我的意思的示例:
declare
l_dblink varchar2(100) := 'DB1';
V_MV_NAME varchar2(2000);
begin
SELECT mv_name into V_MV_NAME
FROM track_mv
WHERE
CREATED_AT = (select MAX(CREATED_AT) from track_mv);
for rws in (
select /*+parallel (4)*/ a.owner,a.table_name, round(sum(b.sum_bytes),2) TOT_OBJECT_SIZE_MB, EST_ONE_ROW_MB
from dba_tables@DB1 a, MAT_VIEW_ANON b
where a.table_name = b.segment_name
and a.table_name in
(select table_name from BOB_TABLE where driver_table is null)
and a.owner in (select distinct schema from BOB_TABLE c)
group by a.owner,a.table_name
order by a.table_name
)
loop...
此处,V_MV_NAME包含变量。我想在查询正文中使用该变量:
for rws in (
select /*+parallel (4)*/ a.owner,a.table_name, round(sum(b.sum_bytes),2) TOT_OBJECT_SIZE_MB, EST_ONE_ROW_MB
from dba_tables@DB1 a, MAT_VIEW_ANON b
where a.table_name = b.segment_name
因此它可能会显示以下内容:
from dba_tables@DB1 a, ||V_MV_NAME|| 'b'
或类似。该代码已经具有硬编码值。如果可能的话,这将是最简单的事情?
答案 0 :(得分:0)
我想在存储过程中用作某些SQL一部分的物化视图的名称保存在表中
这是一个坏主意。它不会扩展,您必须将代码切换到动态SQL,这很难看而且很难维护。对于简单的情况,这是...啊,好的,可以接受,但是对于您这样的东西-嗯,我不想这样做。
我建议您找到另一种方法。
无论如何,为什么要这样做?按原样使用实例化视图名称 ,而不存储在某些表中。