在FOR循环中动态引用表

时间:2015-02-10 20:25:56

标签: sql oracle plsql

我正在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数据库名称?

1 个答案:

答案 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;

基于answer by Solomon Yakobson on Oracle Community forum

相关问题