Question

How to send an email through oracle stored procedure

Asked by: sunilbains

Please advise on how can i send email from oracle procedure. I have a requiremnt in which i need to send an alert email if count does not match. I never used email in procedure before.
Please assist.
Example-
x=select count(*) from table A;
y-select count(*) from table B;
If x=y
then
insert into c select * from table A;
else
Send alert email to team that count does not match <----- How to do this part???

Thanks in advance


This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-11-04 at 09:49:00ID24871741
Topic

Oracle Database

Participating Experts
2
Points
500
Comments
25

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Oracle and Java
    Hi there, i wrote a procedure based on Java for Oracle. CREATE OR REPLACE JAVA SOURCE NAMED "BlobHandler" AS import java.lang.*; import java.sql.*; import oracle.sql.*; import java.io.*; and so on ... When I try to implement it to oracle there appears an error O...
  2. Oracle Synchronization
    Hi All, I have a oracle 9i database.... I have another oralce 9i database in a seperate machine with the same hardware configuration.I want changes in the first oracel daabase to be synchronised to the other database so that if my main database crashes some day then i can rec...
  3. oracle wrap
    can I make modification to oracle wrap procedure ?any help will be appreciated.
  4. oracle procedure
    could you pls decode it simple words 1 thru 20 ..because I dont understand..I understand after that. 1. CREATE OR REPLACE PROCEDURE LOAD_FID_ORDER_DETAIL_F (gl_period varchar2) 2. AS 3. process_name varchar2(30); 4. result va...
  5. Using Procedures on Oracle Forms
    Hi guys, I'm trying to create an error that appears based on the verification of two fields on a selected record. If there is a 'Y' in field 1 and no value in field 2, it will cause an error. If there is a 'N' in field 1 and no value in field 2, the operation continues. I...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: slightwvPosted on 2009-11-04 at 09:54:18ID: 25741942

What version of Oracle?  If 10g or above,  look up UTL_MAIL.  It's pretty straight forward.

http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10802/u_mail.htm

 

by: slightwvPosted on 2009-11-04 at 09:55:44ID: 25741956

forgot to add:  the sneaky part is the smtp_out_server init.ora/spfile parameter.

 

by: sdstuberPosted on 2009-11-04 at 09:56:56ID: 25741963

in 8i or higher, or if you need more control than utl_mail offers you can use utl_smtp

DECLARE
    v_connection   UTL_SMTP.connection;
BEGIN
    v_connection := UTL_SMTP.open_connection('your.email.server.com');
    UTL_SMTP.helo(v_connection, 'your.domain.com');
    UTL_SMTP.mail(v_connection, 'your_return_address@your.domain.com');
    UTL_SMTP.rcpt(v_connection, 'your_recipient@your.domain.com');
    UTL_SMTP.open_data(v_connection);
 
    UTL_SMTP.write_data (v_connection,
                         'From: test from address' || UTL_TCP.crlf
                        );
    UTL_SMTP.write_data (v_connection, 'To: test to address' || UTL_TCP.crlf);
    UTL_SMTP.write_data (v_connection,
                         'Subject: test subject' || UTL_TCP.crlf);
       UTL_SMTP.write_data (v_connection, UTL_TCP.crlf);
    UTL_SMTP.write_data (v_connection, 'test body' || UTL_TCP.crlf);
    UTL_SMTP.close_data (v_connection);
    UTL_SMTP.quit (v_connection);
EXCEPTION
    WHEN OTHERS
    THEN
        DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack);
END;

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

Select allOpen in new window

 

by: sdstuberPosted on 2009-11-04 at 09:58:11ID: 25741975

also note in 11g or higher you might need your dba to open up an ACL to the smtp server and port if it isn't open already

This will apply to both utl_smtp as well as utl_mail

 

by: slightwvPosted on 2009-11-04 at 10:02:02ID: 25742009

Man you caught me typing up a test case.  Oh well, since I already have it...

drop table tab1;
drop table tab2; 
create table tab1 (col1 char(1));
create table tab2 (col1 char(1)); 
insert into tab1 values('a'); 
insert into tab2 values('a');
insert into tab2 values('a');
commit; 
declare 
	sender_v		varchar2(50) := 'databaseServer@mydomain.com';
	recipient_v	varchar2(50) := 'someuser@mydomain.com';
	subj_v		varchar2(100);
	difference	number; 
begin
	 
		select count(*) into difference from tab1; 
		select count(*) - difference  into difference from tab2; 

	if difference != 0 then
		utl_mail.send(
			sender => sender_v,
			recipients => recipient_v,
			subject => 'We have a problem.',
			message => 'Counts are off by ' || to_char(difference)
		);
	end if;
end;
/
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

Select allOpen in new window

 

by: sdstuberPosted on 2009-11-04 at 10:08:27ID: 25742073

:)  your work isn't duplicated though, now there is an example with each package

 

by: sunilbainsPosted on 2009-11-04 at 10:23:47ID: 25742221

Hi slightwv,
From where, I can find sender_v email address?
----
declare
      sender_v            varchar2(50) := 'databaseServer@mydomain.com';
      recipient_v      varchar2(50) := 'someuser@mydomain.com';
      subj_v            varchar2(100);
      difference      number;
begin
      
            select count(*) into difference from tab1;
            select count(*) - difference  into difference from tab2;

      if difference != 0 then
            utl_mail.send(
                  sender => sender_v,
                  recipients => recipient_v,
                  subject => 'We have a problem.',
                  message => 'Counts are off by ' || to_char(difference)
            );
      end if;
end;

 

by: sdstuberPosted on 2009-11-04 at 10:27:10ID: 25742257

sender_v  is YOU, or whatever address you want the recipient to reply to and automated bounce-back messages to go to

 

by: slightwvPosted on 2009-11-04 at 10:28:06ID: 25742268

Make it up.  On our systems I need to use our mail domain but I literally use the user name 'databaseserver' so I know where it comes from.

 

by: sunilbainsPosted on 2009-11-04 at 10:34:47ID: 25742339

Hi Slight,
Does it mean i can use any name in sender_v. also, when i try to run this this procedure, am getting util_mail must be declared error

 

by: sdstuberPosted on 2009-11-04 at 10:36:27ID: 25742354

yes, you can use any name,

utl_mail is not installed by default

have your dba install   $ORACLE_HOME/rdbms/admin/utlmail.sql

 

by: sdstuberPosted on 2009-11-04 at 10:37:38ID: 25742368

by default there are no privileges on utl_mail either,  so your dba will need to grant execute on it as well

 

by: sdstuberPosted on 2009-11-04 at 10:40:03ID: 25742399

oops, forgot the package body

also need to install  $ORACLE_HOME/rdbms/admin/prvtmail.sql

 

by: slightwvPosted on 2009-11-04 at 10:41:29ID: 25742416

I was hoping you would have looked at the docs in the link I posted.  It's all in there.

Not sure why but the docs also have you run:
$ORACLE_HOME/rdbms/admin/prvtmail.sql

More on the 'sender', this is also know as spoofing emails.  You can make it look like the email is sent from the president of your country.  Just be aware as sdstuber mentioned, this is also who the replies go to.

 

by: sunilbainsPosted on 2009-11-04 at 10:42:44ID: 25742427

Can i try to run this procedure through bash script where i can use mail -x command to send mail. If yes, how can i execute this oracle procedure in bash shell script?

 

by: sdstuberPosted on 2009-11-04 at 10:45:07ID: 25742453

actually the package body is in prvtmail.plb

not prvtmail.sql

 

by: sdstuberPosted on 2009-11-04 at 10:46:21ID: 25742465

you run the sql scripts through sqlplus,  not bash.  but you could certainly invoke sqlplus from a bash prompt or from within a bash script


$ sqlplus / as sysdba  

SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql

SQL> $ORACLE_HOME/rdbms/admin/prvtmail.plb

 

by: slightwvPosted on 2009-11-04 at 10:47:12ID: 25742476

>>not prvtmail.sql

pulled from the docs.

>>Can i try to run this procedure through bash script where i can use mail -x command to send mail. If yes, how can i execute this oracle procedure in bash shell script?

using mailx is a different solution entirely.  What issues are you trying to solve here?  

UTL_MAIL bypasses the operating system all together.  If you want the OS to send the mail then you probably don't need a stored procedure at all.

 

by: sdstuberPosted on 2009-11-04 at 10:56:23ID: 25742583

>>>>not prvtmail.sql

>>pulled from the docs.

I agree the docs dail prvtmail.sql   -  that's why I posted it originally too

but

prvtmail.plb  was  pulled from $ORACLE_HOME/rdbms/admin  in both 10g and 11g homes





 

by: sunilbainsPosted on 2009-11-05 at 09:40:36ID: 25751902

All,
The req. is bit change.
I need to put the result of "select count(*) from table a"  into bash script say variable a. How can i do this.

 

by: sdstuberPosted on 2009-11-05 at 09:42:54ID: 25751921

that sounds like a different question entirely.

I think
this one "How to send an email through oracle stored procedure" has been answered in two different ways.

If you want to send email through mailx via bash script that is something completely different.

 

by: sunilbainsPosted on 2009-11-05 at 09:44:23ID: 25751934

In which group , I need to put this ques?

 

by: slightwvPosted on 2009-11-05 at 09:45:47ID: 25751953

You can post another question in the Oracle Zones.  Someone there will be able to help you.

 

by: sdstuberPosted on 2009-11-05 at 09:46:18ID: 25751957

for bash, I'd recommend one of the linux groups and possibly shell scripting you will probably want to include Oracle as a 3rd zone since it's the source of the data

 

by: sdstuberPosted on 2009-11-05 at 09:47:33ID: 25751964

/Programming/Languages/Scripting/Shell/bash

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...