Update statement updates all rows [message #630807] |
Mon, 05 January 2015 08:45 |
|
rmccleave559
Messages: 5 Registered: January 2015
|
Junior Member |
|
|
Hi basically I have a procedure wrote in a package but it seems to update all rows instead of the one used in the where clause can anyone tell me why?
PROCEDURE UPDATE_DETAILS(id NUMBER, membershipNumber VARCHAR2, surname VARCHAR2, forename VARCHAR2,changeStatus VARCHAR2) AS
BEGIN
IF CHANGESTATUS = 'true' THEN
UPDATE members
SET MEMBERSHIP_NO = membershipNumber, SURNAME = surname, FORENAME = forename, SUBMITTED_DATE = SYSDATE, CHANGED_DATE = SYSDATE
WHERE ID = id;
ELSE
UPDATE members
SET MEMBERSHIP_NO = membershipNumber, SURNAME = surname, FORENAME = forename, SUBMITTED_DATE = SYSDATE
WHERE ID = id;
END IF;
END UPDATE_DETAILS;
|
|
|
|
|
|
|
Re: Update statement updates all rows [message #630817 is a reply to message #630814] |
Mon, 05 January 2015 08:56 |
cookiemonster
Messages: 13920 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
Not reserved words - name scope.
If you have a name in a select statement the first thing oracle will do is see if that name corresponds to a column name in one of the tables referenced in the query. If it doesn't oracle will then check to see if the name refers to a variable.
So what you've written is basically:
UPDATE members
SET .....
WHERE members.ID = members.id;
Most oracle shops have coding standards that say parameters and variables should have a prefix to make it obvious what they are and avoid this problem.
|
|
|
|
|
|
|
|
|
|
|
|