Toon posts:

[SQL] Een moeilijke UPDATE query in ORACLE9i2.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik heb in mijn database een paar fouten gevonden en deze wil ik met een
update query oplossen.
Ik heb in mijn tabel catalog de kolommen xmin en xmax staan.
Deze zijn op een of andere manier verkeerd om in mijn database gekomen.
Dus nu heb ik een query nodig die deze omdraait.
Tot nu toe ben ik zover gekomen.

UPDATE catalog
SET xmin,xmax = ( SELECT xmax,xmin )
WHERE xmin>xmax;

Ik mag in de tweede select statement geen from gebruiken omdat hij in de cycle moet blijven.
De vraag is eigelijk is deze statement zo juist of maak ik hier een grote fouten.

  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Je 'WHERE' is eigenlijk niet nodig als alle tupels fout zijn. Daarnaast: heb je je query al uitgevoerd op een test-tabel en zo ja, ging er wat mis of kreeg je een Oracle SQL foutmelding?

Remember, if you have any trouble you can always send a telegram to the Right People.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
3
update catalog
set xmin = xmax
, xmax = xmin

Who is John Galt?


  • Skaah
  • Registratie: Juni 2001
  • Niet online
kun je niet gewoon de kolommen hernoemen?

Verwijderd

Topicstarter
alle tupels zijn niet fout er zijn +- 3000 van 50000
oracle geeft deze foutmelding

fout in regel2
.ORA-00927: missing equel sign.

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 23-05 11:03

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 27 september 2004 @ 16:22:
Hallo,

ik heb in mijn database een paar fouten gevonden en deze wil ik met een
update query oplossen.
Ik heb in mijn tabel catalog de kolommen xmin en xmax staan.
Deze zijn op een of andere manier verkeerd om in mijn database gekomen.
Dus nu heb ik een query nodig die deze omdraait.
Tot nu toe ben ik zover gekomen.

UPDATE catalog
SET xmin,xmax = ( SELECT xmax,xmin )
WHERE xmin>xmax;

Ik mag in de tweede select statement geen from gebruiken omdat hij in de cycle moet blijven.
De vraag is eigelijk is deze statement zo juist of maak ik hier een grote fouten.
Persoonlijk zou ik van de tweede SELECT een gecorreleerde subquery (met FROM) maken om elke kans op fouten uit te sluiten. Daarmee blijf je wel meteen in de cycle.

EDIT:
Een simpeler alternatief is natuurlijk om alle foutieve records eerst naar een hulptabel te verplaatsen (copiëren plus wissen) en dan correct terug copiëren.

[ Voor 10% gewijzigd door Freee!! op 27-09-2004 16:39 ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 27 september 2004 @ 16:34:
alle tupels zijn niet fout er zijn +- 3000 van 50000
oracle geeft deze foutmelding

fout in regel2
.ORA-00927: missing equel sign.
Welke zijn er dan fout?
Bouw die conditie in de where van de update die ik hierboven gaf en je bent klaar.

Who is John Galt?


Verwijderd

Zoals justmental al zei:

code:
1
2
3
4
update catalog
set    xmin = xmax
,      xmax = xmin
where  xmin>xmax


Dit moet lukken.

Verwijderd

Topicstarter
Met deze statement werkte het :

update catalog
set xmin = xmax , xmax = xmin
where xmin>xmax;


Bedankt voor de reacties

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 23-05 11:03

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 27 september 2004 @ 16:39:
Zoals justmental al zei:

code:
1
2
3
4
update catalog
set    xmin = xmax
,      xmax = xmin
where  xmin>xmax


Dit moet lukken.
Dit lijkt een redelijke kans te hebben op een correcte verwerking. Ik zou dit echter wel goed testen, want ik ken databases waarbij dus eerst de eerste toekenning wordt gedaan en daarna de tweede, zodat je met identieke waardes voor xmin en xmax eindigt.

EDIT:
Waarschuwing kwam weer eens als mosterd na de maaltijd.

[ Voor 7% gewijzigd door Freee!! op 27-09-2004 16:43 ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT

Pagina: 1