Как использовать объявленную переменную, которая содержит имя таблицы, как объединение в цикле for. Oracle PL / SQL - PullRequest
0 голосов
/ 29 мая 2019

Имя материализованного представления, которое я хочу использовать как часть некоторого 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'

или аналогично.Код уже на месте с жестко закодированными значениями.Это было бы проще всего сделать, если это возможно?

1 Ответ

0 голосов
/ 29 мая 2019

Имя материализованного представления, которое я хочу использовать как часть некоторого SQL в хранимой процедуре, содержится в таблице

Это плохая идея. Он не будет масштабироваться, вы должны переключить свой код на динамический SQL, который уродлив и сложен в обслуживании. Для простых случаев это ... ах, хорошо, вроде как приемлемо, но для чего-то похожего на вас - да, я бы не хотел этого делать.

Я предлагаю вам найти другой путь.

Почему вы хотите это сделать? Используйте материализованное имя представления как , которое не хранится в какой-либо таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...