Question

Oracle Update confirmation

Asked by: munzer

What is the best way to do this?
I have a client program (http client or web page) that sends employee info to the database for
update. Let us say it send address information (empid, street_address,city,state,zip).

My stored procedure should perform the update and send a confirmation to the client that says "Updates
Saved" or "Updates Failed".

My current thinking is as follows:
1. check if the record exist or not by doing
  select count(*)into l_Cnt from  emp where empid=p_empid;
2. If l_cnt > 0 then use implicit cursor
  For x in (select * from emp where empid=p_id)
  LOOP
...
END LOOP;

I am also thinking of adding "No DATA FOUND" exception, however it might not be raise since I use implicit cursor.

3. If record does not exist raise NO_DATA_FOUND, and alert program this person does not exist.

4. If person exists, then do
   update emp set ...... where empid=p_empid;

5. confirm the update and alert user. I am thinking here of doing this if
   sql%rowcount = 0 then row was not updated and alert user about failure
  sql%rowcount = 1 then row was updated and alert user about success

Basically I want to know if this is the best way to do this and if there is a better way to design it. My objective is:

1. Code something that tells the client whether "Updates were saved" or"Updates failed".
2. Handle the exceptions that can happen with this update and alert the client the problem/error.

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
2007-08-20 at 20:42:16ID22775824
Tags

oracle

,

update

Topics

CGI Scripting

,

PL / SQL

,

Oracle 9.x

Participating Experts
2
Points
500
Comments
10

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. Rowcount?
    how do you get a result where you only want to find a specific number of rows, i.e, in oracle you can use rowcount, for example, select * from table where rowcount<200, is there a similar command in sql server? or how can i do this?
  2. All emps of each dept in one flat record
    Hi, imagine the emp table, and a table called company, which lookes like this: dept,emp1,emp2,emp3,emp4,emp5,emp6,a.s.o. as columns and I want to insert the records from the emp table. all employees of each dept in one row ! How can I do this with SQL*Plus ?
  3. Rowcount in refcursor
    I want to get the number of rows selected in a refcursor without traversing or fetching from the cursor... If i am using Cursorname%ROWCOUNT in a stored procedure and connecting through ADO from the frontend i am getting 'Statement handle not executed properly'....

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: jwahlPosted on 2007-08-20 at 22:25:58ID: 19735693

there are many ways, but your solution surly is a good one.

create a procedure with IN parameter p_empid and two OUT parameters: p_errorcode NUMBER, p_errortext VARCHAR2 for example.

if p_errorcode return 0 --> OK
otherwise: --> ERROR. use p_errorcode to describe the error.

the procedure could be very simple:

DECLARE
    CURSOR emp_c IS
    SELECT * FROM emp
    WHERE empid = p_empid FOR UPDATE;
BEGIN
    FOR emp_rt IN emp_c
    LOOP
        UPDATE emp
        SET ....
        WHERE CURRENT OF emp_c;
        --
        p_errorcode := 0;
        p_errortext := 'Update successfull';
        --
    END LOOP;
    --
    IF p_errorcode IS NULL THEN
        p_errorcode := 1;
        p_errortext := 'Error: No Record found for p_empid=' || p_empid;
    END IF;
    --
EXCEPTION
    ....
END;

here will never raise a NO_DATA_FOUND exception, because the cursor closes immediatly when no records match.

   

 

by: prast1007Posted on 2007-08-21 at 00:42:26ID: 19736031

From your description I assume that at one time the request is only handle 1 record for update. If this is the case you can define a  Function that return the message instanously. like below (I also assume all columns are varchar2, you just have to replace it accordingly).


Function sfc_upd_emp (p_empid varchar2, street_address varchar2, city varchar2, state varchar2, zip varchar2) return varchar2 is
  vchEmpID varchar2(10);
begin
  select empID into vchEmpID
    from emp where empid=p_empid;
 
 update emp
       set .......
  where empId = vchEmpID;
  commit;
  return 'Update Success !';
exception when no_data_found then
  return 'Invalid Emp ID !';
end;

I used it personally for some of my projects...

I wish it helps.
 

 

by: munzerPosted on 2007-08-21 at 20:30:17ID: 19743410

I forgot to mention that this is a mod_plsql procedure. I only use IN arameters and print the output using htp.print statements.

I also do not use "select for update". I think this is only for client/server app and nto web app. For web app you need to use optimistic locking. I may be wrong here. but http is stateless and using select for update will lock the record for a long time.

Looking at the above code, You are saying that if the update runs then it is successful. However , the update can run and I can get
0 rows updated
which means the row was not really updated but the program will say "update Successful".

It seems to me that there should be more checking on whether update occured successfully or not.
1.  check the number of rows updated.
2. select the data after commit and verify that it is what the update called for.

 

by: prast1007Posted on 2007-08-22 at 00:36:13ID: 19744198

munzer,
In the function I wrote, if there's nothing to update, it will said 'Invalid Emp ID', because before the update proceed, the function check whether the record thal will be updated exists (that why there's a select statement before the update).

When this select statement failed (Find no rows in return), the procedure jump to exception right away without making any updation, and give return message 'Invalid Emp ID'

If you want to check whether the commit is failed, you can add more exception on that function.

 

by: munzerPosted on 2007-08-22 at 08:06:05ID: 19746805

I think what you are saying is that

if select works the update will always work.
if select fails then record was not found and update failed.

But is not there a case where you find a record and then update fails (0 rows updated)?
Also, if select fails then I would say the record did not exist. I am trying to tie the success/failure for the function of the update statement.

 

by: prast1007Posted on 2007-08-22 at 10:31:59ID: 19748083

Hmm... I see what you are looking for.
Let me restructured the proposed function to be like this one below :

Function sfc_upd_emp (p_empid varchar2, p_street_address varchar2, p_city varchar2, p_state varchar2, p_zip varchar2) return varchar2 is
  vchEmpID varchar2(10);
  vchStreet  varchar2(100);
  vchCity varchar2(50);
  vchState varchar2(50);
  vchZip varchar2(7);
begin
  select empID into vchEmpID
    from emp where empid=p_empid;
 
 update emp
       set street_address = p_street_address,
             city  = p_city,
             state = p_state,
             zip = p_zip
  where empId = vchEmpID
  returning street_address, city, state, zip
  into vchstreet, vchcity, vchstate, vchzip ;
  if vchstreet = p_street_addres and vchcity = p_city and vchstate = p_state and vchzip then
     commit;
    return 'Update Success !';
  else
    rollback;
    return 'Update Failed';
  end if;
exception when no_data_found then
  return 'Emp ID does not Exists !';
end;


 

by: munzerPosted on 2007-08-24 at 19:45:44ID: 19766629

your solution is excellent.

one more thing

1.  Do you worry about lost updates and how you handle those? optimstic locking

2.  I am thinking of adding another exception
"when others then
  get error code and error message
save it to a table

do you think this is enough and appropriate to have two exceptions for his kind of program

one for no data found
one for other general errors.

 

by: prast1007Posted on 2007-08-25 at 11:53:27ID: 19768705

1. No, I never worry about unsuccessful update, in most of my update/insert/delete procedures/functions, I mostly give a return value to user, and I always add when others exception to handle any unexpected result. Mostly it only rollback the previous command, and return the 'SQLERRMS' error text to user user, and for a long functions/procedures I usually put some comments to mark, where the error come from.

2. Besides No Data Found and Others, I usually also put a DUP_VAL_ON_INDEX to notify if an insert/update failed because of duplicate values in some indexes.

 

by: munzerPosted on 2007-08-26 at 13:50:23ID: 19772192

prast

what i meant by lost updates is that when you update do u lock the record or not.

If you do not, then you are taking a chance that someone else may have read the record and update it then you overwrite his changes with your update.

This is what "select for update" = pessimistic lock is all about.

For web apps I think the best is to use optimistic locking  where you read the values before your update and then update only when the values are still the same to make sure no one has changed any values.
You can also do it based on a flag or reord checksum value.

 

by: prast1007Posted on 2007-08-26 at 19:24:25ID: 19773349

Most of our application environment build on Oracle Form/Report. And fortunately Oracle Forms have built in capabilities to check whether the data we queried before we has been changed before we update it.

That's why I never worried about lost updates. If the data has been changed before we update it, Oracle Form will alert it.

But, Optimistic locking like you thought is surely a good approach for such web application.

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...