[SQL] Oracle update

Pagina: 1
Acties:
  • 457 views sinds 30-01-2008

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
code:
1
2
3
update tabel1 
set veld 1 = veld1 + 1
where tabel1.veld2 = tabel2.veld1 and tabel2.veld1 between datum1 and datum2;


Ik wil de waarde van een bepaald veld op laten hogen op basis van de waarde van een veld uit een andere tabel met een relatie.
Bovenstaande code werkt echter niet..
Wat ik kan doen is natuurlijk eerst een tabel maken op basis van tabel2 waarbij ik meteen een waarde toevoeg en dan tabel 1 met het veld uit deze nieuwe tabel updaten.. Maar dat is me iets te omslachtig.

Als ik een view maak en de view probeer te updaten geeft Oracle aan: .ORA-01779: Kan een kolom die verwijst naar een niet sleutelhoudende tabel niet wijzigen.
Ik heb een PK toegevoegd maar hij blijft het zeggen...
Ik heb toen een FK toegevoegd omdat in de tabel 1 meerdere keren het item uit tabel2 voorkomt.. een een op veel relatie dus. hij moet voor elke keer dat hij het veld tegen komt dat tussen de twee datums ligt de waarde veranderen...
Heeft iemand een oplossing?

Sign of my Time


  • momania
  • Registratie: Mei 2000
  • Laatst online: 10:57

momania

iPhone 30! Bam!

SQL:
1
2
3
update tabel1 
set veld 1 = ((select veld1 from ....blabla... where...blabla) + 1)
where etc. etc...


:?

Neem je whisky mee, is het te weinig... *zucht*


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:21

Janoz

Moderator Devschuur®

!litemod

Ik denk dat het probleem niet in de set, maar in de where zit. Echter zal de oplossing wel ongeveer hetzelfde zijn (maar dan tabel1.veld2 IN (select.......)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
code:
1
2
3
UPDATE Tabel1 
SET VELD1= (SELECT TABEL1.VELD1 FROM TABEL1 INNER JOIN TABEL2 ON TABEL1.VELD2 = TABEL2.VELD1) + 1)
WHERE DATUM Between '1-1-2006' And '6-30-2006';

Dit heb ik nu. ik krijg de melding:

.ORA-00933: SQL-opdracht is niet juist beëindigd.

Sign of my Time


  • momania
  • Registratie: Mei 2000
  • Laatst online: 10:57

momania

iPhone 30! Bam!

je mist een '('

Neem je whisky mee, is het te weinig... *zucht*


  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
code:
1
2
3
UPDATE RDGG_OHW 
SET OHW_WAARDE = ((SELECT RDGG_OHW.OHW_WAARDE FROM RDGG_OHW INNER JOIN TB_VAL_DBC_TRAJECTEN ON RDGG_OHW.DBC_TRAJECTNR = TB_VAL_DBC_TRAJECTEN.DBC_TRAJECTNR) + 10000)
WHERE TB_VAL_DBC_TRAJECTEN.VERWERKDATUM Between '1-1-2006' And '6-30-2006';

.ORA-00907: Ontbrekend rechterhaakje.

Ik heb maar even de echte code genomen...misschien zit daar de fout in.

Sign of my Time


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:24

Creepy

Tactical Espionage Splatterer

Kom op zeg. We gaan er hier vanuit dat je zelf je foutmelding e.d. probeert op te lossen. Daarbij komt dat een UPDATE met een JOIN erin qua RDMBS best wel eens kan afwijken. Dus pak de Oracle handleiding erbij en ga aan de slag. Dit is echt wel zelf te vinden.

Alleen een foutmelding dumpen en hopen dat we dat hier voor je oplossen is not done, en dat weet je ondertussen ook wel ;).

[ Voor 19% gewijzigd door Creepy op 14-08-2006 17:18 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.