首页 > 解决方案 > 如何创建通过电子邮件发送视图快照的存储过程?

问题描述

我有一个视图,我需要每天查看它,它可以让我知道我需要的数据馈送是否在早上的设定时间准备好。

select * from vdatafeeds

我想通过加载视图来自动执行此操作,而不是使用存储过程将其快照通过电子邮件发送给我。

有没有办法创建一个存储过程,当运行电子邮件时,该过程会从视图的副本中取出?

我正在使用 SQL Developer 20.4

TLDR:基本上我只是希望它就像有人加载视图然后复制内容并将其粘贴到电子邮件中然后将其发送给我一样。

标签: sqloracleoracle-sqldeveloper

解决方案


有办法,当然。

如果视图内容不是那么大(我想是这样;谁会想要检查百万行?)并且适合VARCHAR2数据类型局部变量大小,您可以逐行选择(在循环中)并将值连接到该变量中; 最后,您只需将其放入电子邮件正文中。

另一种选择是创建列的数据类型为的附加表,CLOB并将视图内容放在那里。然后,您将发送一封带有附件的电子邮件,其来源是该CLOB列。

或者,您可以创建一个文件(使用UTL_FILE内置包)。


无论您选择哪个选项,这样的存储过程都将使用DBMS_SCHEDULER(或 DBMS_JOB,如果在您的数据库版本中仍然可用)安排在所需时间运行(例如每天早上 06:50)。


但是,您真的必须检查整个视图内容吗?你不能“总结”要发送的信息吗?例如:

  - number of rows in a view : 23
  - last updated             : 10.08.2021 23:48

那是 - 在我看来 - 更简单和更容易。


推荐阅读