Oracle存储过程搜索

时间:2013-09-20 15:00:51

标签: oracle search stored-procedures

我有以下代码,我的任务是将'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;  

2 个答案:

答案 0 :(得分:2)

eFrom不会存储在任何地方(至少不会存储在您发布的代码中)。它是传递给此过程的参数。您需要转到任何代码调用此过程以查看该代码获取eFrom值的位置(当然,可能有多个位置调用此过程,每个位置都从不同的位置获取值) 。这些地方可能是其他PL / SQL块(在这种情况下,您可以使用dba_dependencies来跟踪它们。但它们也可能在数据库外部运行的代码中,在这种情况下您需要深入了解该数据源

如果您正在寻找正在调用SEND_MAIL过程

的其他存储的PL / SQL对象
SELECT owner, name, type
  FROM dba_dependencies
 WHERE referenced_name = 'SEND_MAIL'
   AND referenced_owner = <<owner of procedure>>

如果您无法访问dba_dependencies,则可以使用all_dependenciesuser_dependencies,而不是假设您拥有调用程序的权限或拥有它。

当然,您可以修改过程以简单地覆盖传入的eFrom值并传递硬编码no-response@domain.com,但这似乎不太可能是正确的。您还可以修改代码,以便仅在传入的值为eFrom时覆盖anonymous@domain.com值,但同样,这不太可能是最佳方法。

答案 1 :(得分:0)

在我看来,to,from,cc,subject和message作为参数传递给存储过程。你不能通过查看存储过程来判断值是什么;你必须转到调用它的代码才能看到它传入的内容。

您可能需要更新该表以更改eFrom地址。