2015-02-10 2 views
0

Я разрабатываю скрипт в базе данных Oracle, в результате которого пользователи электронной почты отправляются по электронной почте. Я хотел бы только один раз отправлять пользователям по электронной почте один раз и вам нужно будет динамически ссылаться на некоторые материализованные представления, чтобы сделать это, или вам придется писать около 40 различных версий, где я просто изменяю имя таблицы цикла ниже.Динамически ссылается на таблицу В цикле FOR

У меня есть цикл, который работает в настоящее время, что выглядит следующим образом:

for response in (select result.* from mv_table1 result) loop 
    --for response in (select * from v_dynamic_database) loop 
     UTL_SMTP.write_data(response.data); 
    end loop; 

Вы можете увидеть, где я закомментирована место, где я попытался с помощью переменной (VARCHAR, что я назначу динамически в другом цикле выше этого) вместо имени официальной таблицы, однако процедура перестает работать, когда я это делаю.

Есть ли способ динамически модифицировать имя базы данных в цикле for?

+0

Это похоже на: http://stackoverflow.com/questions/10853586/variable-for-database-link-name –

ответ

4

Вы можете открыть строку запроса в виде курсора и выполнить цикл. В строке вы можете легко использовать переменную для имени таблицы.

Что-то вроде этого:

DECLARE 
    v_cur sys_refcursor; 
    v_data varchar2(4000); 
BEGIN 
    OPEN v_cur FOR 'select result.data from ' || mv_table1 || ' result'; 
    loop 
     FETCH v_cur 
     INTO v_data; 
     EXIT WHEN v_cur%notfound; 
     UTL_SMTP.write_data(v_data); 
    END LOOP; 
    CLOSE v_cur; 
END; 

на основе answer by Solomon Yakobson on Oracle Community forum.

Смежные вопросы