Re: update all rows such that doesn't cause duplicate

From: lora <anjela_pat_at_yahoo.com>
Date: Mon, 14 Dec 2009 12:40:38 -0800 (PST)
Message-ID: <f0c68a2b-037d-402b-bacf-e1c1e27712d2_at_g7g2000yqa.googlegroups.com>



So, I'm trying to replace all rows that have $myString with myString and this particular field is already a primary key field. The primary key is already defined for this table so performing the update gives me a constraint violation.

However, what I want to do is in the SQL itself perform the update of the replace only if the resulting replace will cause no duplicates for that field.

I tried fooling around with select replace and NOT in, but didn't get this to work. However, I'm sure there is a way! Thanks

SELECT REPLACE(request, '$myString', 'myString') as A FROM MYTAB WHERE (myOperation='myOp') and request like '%myString%' and A not in (select request from MYTAB)

On Dec 14, 3:11 pm, Mark D Powell <Mark.Powe..._at_hp.com> wrote:
> On Dec 14, 2:51 pm, lora <anjela_..._at_yahoo.com> wrote:
>
>
>
>
>
> > Hello all,
>
> > I've a oracle DB in which one of the VARCHAR2 fields that is part of
> > the key needs to have a substring replaced with another with no
> > special $ character in front of it.
>
> > However, when I do this replace, I notice that for a few rows, this
> > would cause a duplicate row and hence get rejected.
>
> > So, I'd like to formulate a SQL statement such that all rows would be
> > updated as long as it doesn't lead to duplicates.
>
> > Any pointers appreciated!
>
> > UPDATE MYTAB SET request = REPLACE(request, '$myString', 'myString')
> > WHERE (operation='myOperation') and request like '%$myString%';
>
> Duplicate based on what?  Building a unique index on the request
> column would prevent duplicates in the example query you posted.
>
> HTH -- Mark D Powell --- Hide quoted text -
>
> - Show quoted text -
Received on Mon Dec 14 2009 - 14:40:38 CST

Original text of this message