En V7R1,
Le code suivant renvoie un status SQLSTT 42828 :
Code : Tout sélectionner
EXEC SQL
DECLARE CUR1 CURSOR FOR
SELECT * FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.A6IDCPTIND = B.E8IDCPTIND
LEFT JOIN TABLE3 C ON C.EBIDCOUPLE = B.E8IDCOUPLE
LEFT JOIN TABLE4 D ON C.EBCOPRODUI = D.A1COPRODUI
WHERE A.ZONE1 LIKE '123456%'
AND A.ZONE2 = '9999-12-31'
AND D.ZONE55 = 'champ1';
EXEC SQL
OPEN CUR1;
EXEC SQL
FETCH NEXT FROM CUR1;
dow SqlCode >= 0 and SqlCode < 100;
EXEC SQL
UPDATE TABLE1
SET ZONE3 = 'AAA'
WHERE CURRENT OF CUR1;
EXEC SQL
FETCH NEXT FROM CUR1;
EndDo;
EXEC SQL
CLOSE CUR1;
Code : Tout sélectionner
EXEC SQL
DECLARE CUR1 CURSOR FOR
SELECT * FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.A6IDCPTIND = B.E8IDCPTIND
LEFT JOIN TABLE3 C ON C.EBIDCOUPLE = B.E8IDCOUPLE
LEFT JOIN TABLE4 D ON C.EBCOPRODUI = D.A1COPRODUI
WHERE A.ZONE1 LIKE '123456%'
AND A.ZONE2 = '9999-12-31'
AND D.ZONE55 = 'champ1'
[b]WITH NC
FOR UPDATE OF ZONE3[/b];
Auriez-vous un moyen pour permettre au programme de mettre à jour le poste de la table "principale" lu par le FETCH du Curseur ?
Merci de vos réponses.
Ca a l'air de fonctionner comme voulu en modifiant le curseur comme ci :
Code : Tout sélectionner
EXEC SQL
DECLARE CUR1 CURSOR FOR
SELECT * FROM TABLE1 A
WHERE A.ZONE1 LIKE '123456%'
AND A.ZONE2 = '9999-12-31'
AND A.CLE1 IN
(SELECT AA.CLE1 FROM TABLE1 AA
LEFT JOIN TABLE2 B ON AA.A6IDCPTIND = B.E8IDCPTIND
LEFT JOIN TABLE3 C ON C.EBIDCOUPLE = B.E8IDCOUPLE
LEFT JOIN TABLE4 D ON C.EBCOPRODUI = D.A1COPRODUI
WHERE D.ZONE55 = 'champ1')
WITH NC
FOR UPDATE OF ZONE3