我正在Oracle数据库中开发一个脚本,最终会通过电子邮件向相关用户发送电子邮件。我想只向用户发送一次电子邮件,并且需要动态引用一些物化视图才能这样做,或者必须编写大约40个不同的版本,我只需更改下面循环的表名。
我有一个当前有效的循环:
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循环中动态mondify数据库名称?
答案 0 :(得分: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;