Hoe kan je het beste meerdere records met 1 statement updaten?
Ik heb een calamiteit, deze heeft meerdere stappen. Elke stap heeft een status.
Op het moment dat een calamiteit wijzigt, worden alle stappen opnieuw aangemaakt.
Sommige van de nieuwe stappen kunnen overeenkomen met de oude stappen. Is dit het geval + nog een aantal voorwaarden, dan moet de status van de nieuwe stap gelijk worden aan de status van de oude stap (UPDATE)
Helaas lukt me het niet om dit voor elkaar te krijgen. :-S
Ik heb het volgende:
Zowel de SET krijgt twee rijen terug als de WHERE clause.
Ik krijg nu echter telkens de error: Single-row subquery returns more than one row!
Dit klopt
De SET krijg
2
2
en de Where krijgt:
5
6
ik wil dus dat hij eerst voor de eerste (5) de status op 2 zet. en daarna voor de 2e (6) de status op 2
Hoe kan ik dat het beste doen? Ik wil het eigenlijk zonder hulp van een procedure met cursor oid doen. Omdat hier geen verder ook geen gebruik wordt gemaakt van procedures.
alvast bedankt.
Ik heb een calamiteit, deze heeft meerdere stappen. Elke stap heeft een status.
Op het moment dat een calamiteit wijzigt, worden alle stappen opnieuw aangemaakt.
Sommige van de nieuwe stappen kunnen overeenkomen met de oude stappen. Is dit het geval + nog een aantal voorwaarden, dan moet de status van de nieuwe stap gelijk worden aan de status van de oude stap (UPDATE)
Helaas lukt me het niet om dit voor elkaar te krijgen. :-S
Ik heb het volgende:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| UPDATE vbb.vbb_calamiteit_hoofdstappen chp_new SET chp_new.sts_id = (SELECT oud_status.sts_id FROM (SELECT chp.CHF_ID, chp.sts_id FROM vbb.vbb_calamiteiten clt , vbb.vbb_calamiteit_hoofdstappen chp WHERE clt.ID = :OLD_CLT_ID AND clt.ID = chp.CLT_ID) oud_status , (SELECT chp.CHF_ID FROM vbb.vbb_calamiteiten clt , vbb.vbb_calamiteit_hoofdstappen chp WHERE clt.ID = :NEW_CLT_ID AND clt.ID = chp.CLT_ID) nieuw_status WHERE oud_status.CHF_ID = nieuw_status.CHF_ID) WHERE chp_new.CLT_ID = :NEW_CLT_ID AND chp_new.CHF_ID = ( SELECT oud_status.CHF_ID FROM (SELECT chp.CHF_ID, chp.sts_id FROM vbb.vbb_calamiteiten clt , vbb.vbb_calamiteit_hoofdstappen chp WHERE clt.ID = :OLD_CLT_ID AND clt.ID = chp.CLT_ID) oud_status , (SELECT chp.CHF_ID, chp.sts_id FROM vbb.vbb_calamiteiten clt , vbb.vbb_calamiteit_hoofdstappen chp WHERE clt.ID = :NEW_CLT_ID AND clt.ID = chp.CLT_ID) nieuw_status WHERE oud_status.CHF_ID = nieuw_status.CHF_ID) AND EXISTS ( SELECT tpl.ID FROM vbb.vbb_calamiteitstappen_tpl tpl WHERE tpl.CHF_ID = :CHF_ID AND tpl.CLF_ID = :CLF_ID AND tpl.OPNIEUW_CALAMITEIT = 1 AND tpl.OPNIEUW_SCHAAL = 1) |
Zowel de SET krijgt twee rijen terug als de WHERE clause.
Ik krijg nu echter telkens de error: Single-row subquery returns more than one row!
Dit klopt
De SET krijg
2
2
en de Where krijgt:
5
6
ik wil dus dat hij eerst voor de eerste (5) de status op 2 zet. en daarna voor de 2e (6) de status op 2
Hoe kan ik dat het beste doen? Ik wil het eigenlijk zonder hulp van een procedure met cursor oid doen. Omdat hier geen verder ook geen gebruik wordt gemaakt van procedures.
alvast bedankt.