我有以下代码,我的任务是将'eFrom'
值从'anonymous'
更改为'no-response'
。我不知道存储值的位置或如何找到它。现在,该过程发出一封发件人值为'anonymous@mail.com'
的电子邮件。有谁知道如何找到'eFrom'
的值或它存储在哪个表中?我目前正在使用Oracle SQL Developer。
create or replace PROCEDURE SEND_MAIL
(eTo IN VARCHAR2,
eFrom IN VARCHAR2,
eCC IN varchar2,
eSubject IN VARCHAR2,
eMessage IN CLOB) AS
BEGIN
execute immediate 'alter session set smtp_out_server = ' || chr(39) || 'mail.com' || chr(39);
UTL_MAIL.send(sender => eFrom,
recipients => eTo,
cc => eCC,
subject => eSubject,
message => eMessage,
mime_type => 'text/html; charset=utf-8');
END;
答案 0 :(得分:2)
eFrom
不会存储在任何地方(至少不会存储在您发布的代码中)。它是传递给此过程的参数。您需要转到任何代码调用此过程以查看该代码获取eFrom
值的位置(当然,可能有多个位置调用此过程,每个位置都从不同的位置获取值) 。这些地方可能是其他PL / SQL块(在这种情况下,您可以使用dba_dependencies
来跟踪它们。但它们也可能在数据库外部运行的代码中,在这种情况下您需要深入了解该数据源
如果您正在寻找正在调用SEND_MAIL
过程
SELECT owner, name, type
FROM dba_dependencies
WHERE referenced_name = 'SEND_MAIL'
AND referenced_owner = <<owner of procedure>>
如果您无法访问dba_dependencies
,则可以使用all_dependencies
或user_dependencies
,而不是假设您拥有调用程序的权限或拥有它。
当然,您可以修改过程以简单地覆盖传入的eFrom
值并传递硬编码no-response@domain.com
,但这似乎不太可能是正确的。您还可以修改代码,以便仅在传入的值为eFrom
时覆盖anonymous@domain.com
值,但同样,这不太可能是最佳方法。
答案 1 :(得分:0)
在我看来,to,from,cc,subject和message作为参数传递给存储过程。你不能通过查看存储过程来判断值是什么;你必须转到调用它的代码才能看到它传入的内容。
您可能需要更新该表以更改eFrom地址。