Salut à tous !

Ca fait quelques jours que je me casse la tête sur une requête assez balèze qui ne passe pas...

J'ai parcouru les forums à la recherche d'une solution, mais toutes celles essayées ne fonctionnent pas.
La requête doit faire un update sur le résultat d'un select impliquant plusieurs jointures. Voilà mon meilleur résultat pour le moment :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
UPDATE 
(
SELECT a.resource_type to_update
FROM ps_Proj_Resource p
INNER JOIN PS_KK_SOURCE_HDR h on p.PROCESS_INSTANCE = h.PROCESS_INSTANCE 
INNER JOIN PS_KK_SOURCE_LN l on h.kk_tran_id = l.kk_tran_id
INNER JOIN PS_KK_ACTIVITY_LOG a on h.kk_tran_id = a.kk_tran_id
WHERE ((p.DEPTID = '1137'
	  AND p.project_id = '12000086'
	  AND p.voucher_id in ('00017612','00017610','00017614','00017615','00017613','00017016','00017017','00017015','00017019','00017020','00017018','00019238',
			   	   '00019239','00019237','00019241','00019242','00019240','00018753','00018754','00018752','00018756','00018757','00018755','00014099',
				   '00014098','00014100','00014096','00014095','00014097','00016272','00016271','00016273','00016269','00016268','00016270'))
OR (p.DEPTID = '1136'
   	AND p.project_id = '12000102'
	AND p.voucher_id in ('00014688','00014093','00014690','00014689','00014090','00014089','00014092','00014091','00015824','00015825','00015823','00015827',
				   	   '00015826','00014692','00014691','00015822','00014693','00012379','00017013','00017014','00017012','00012380','00012377','00017010',
					   '00012378','00017009','00013006','00013005','00013008','00013007','00017011','00012381','00013004','00013003')))
AND p.resource_type = ' '
AND a.resource_type = ' ' 
AND a.project_id != 'NA'
AND l.project_id != 'NA'
AND a.ledger_group = 'ANA')
SET to_update = '143'
J'ai une erreur qui me dit
ORA-01779: cannot modify a column which maps to a non key-preserved table.
Help !!


Bon j'ai trouvé en fait, pas si compliqué :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
UPDATE PS_KK_ACTIVITY_LOG
SET resource_type = '143'
WHERE kk_tran_id in
(
SELECT a.kk_tran_id
FROM ps_Proj_Resource p
INNER JOIN PS_KK_SOURCE_HDR h on p.PROCESS_INSTANCE = h.PROCESS_INSTANCE 
INNER JOIN PS_KK_SOURCE_LN l on h.kk_tran_id = l.kk_tran_id
INNER JOIN PS_KK_ACTIVITY_LOG a on h.kk_tran_id = a.kk_tran_id
WHERE ((p.DEPTID = '1137'
	  AND p.project_id = '12000086'
	  AND p.voucher_id in ('00017612','00017610','00017614','00017615','00017613','00017016','00017017','00017015','00017019','00017020','00017018','00019238',
			   	   '00019239','00019237','00019241','00019242','00019240','00018753','00018754','00018752','00018756','00018757','00018755','00014099',
				   '00014098','00014100','00014096','00014095','00014097','00016272','00016271','00016273','00016269','00016268','00016270'))
OR (p.DEPTID = '1136'
   	AND p.project_id = '12000102'
	AND p.voucher_id in ('00014688','00014093','00014690','00014689','00014090','00014089','00014092','00014091','00015824','00015825','00015823','00015827',
				   	   '00015826','00014692','00014691','00015822','00014693','00012379','00017013','00017014','00017012','00012380','00012377','00017010',
					   '00012378','00017009','00013006','00013005','00013008','00013007','00017011','00012381','00013004','00013003')))
AND p.resource_type = ' '
AND a.resource_type = ' ' 
AND a.project_id != 'NA'
AND l.project_id != 'NA'
AND a.ledger_group = 'ANA')
AND resource_type = ' ' 
AND project_id != 'NA'
AND ledger_group = 'ANA'