Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 16h57   #1
Membre du Club
 
Inscription : août 2008
Messages : 223
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 223
Points : 67
Points : 67
Par défaut Petit PL/SQL qui veut pas

Bonjour,

voici un petit script simple mais dans lequel j'ai trouvé moyen de faire (manifestement) des erreurs puisque j'ai les messages suivants en sortie :

Citation:
Error starting at line 1 in command:
Error report:
ORA-06550: Ligne 9, colonne 34 :
PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
ORA-06550: Ligne 4, colonne 1 :
PL/SQL: SQL Statement ignored
ORA-06550: Ligne 11, colonne 4 :
PLS-00103: Symbole ";" rencontré à la place d'un des symboles suivants :

loop
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Voici mon script :
Code :
1
2
3
4
5
6
7
8
9
10
11
BEGIN
FOR record_temp IN (SELECT DISTINCT CONNUM, CORLFI ,COACMN,COETBT ,COIPTE FROM tmsmdc2 WHERE cerdge=2000000)
LOOP 
UPDATE tmsmdc2 c2 SET c2.cerdge= 1101010
WHERE c2.CONNUM=record_temp.CONNUM
AND c2.CORLFI=record_temp.CORLFI
AND c2.COACMN=record_temp.COACMN
AND c2.COETBT=record_temp.COETBT
AND c2.COIPTE=record_temp.COIPTE
END LOOP;
END;
Quelqu'un pour un peu d'aide encore ?

Merci d'avance

Mederik
mederik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h09   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Chaque instruction doit se terminer par un point virgule.

Le tout premier message d'erreur vous indique un emplacement clef :
Citation:
ORA-06550: Ligne 9, colonne 34 :
PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 22h03   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Pour l'erreur Waldar a répondu, mais normalement, le loop ne sert à rien, un simple update suffit.
Code :
1
2
3
4
5
UPDATE tmsmdc2
SET cerdge= 1101010
WHERE (CONNUM, CORLFI, COACMN, COETBT, COIPTE) 
IN (SELECT DISTINCT CONNUM, CORLFI ,COACMN, COETBT, COIPTE 
		FROM tmsmdc2 WHERE cerdge=2000000);
ou
Code :
1
2
3
4
5
6
7
8
9
UPDATE tmsmdc2 a
SET cerdge= 1101010
WHERE EXISTS (SELECT 1 FROM tmsmdc2 b
	WHERE b.CONNUM=a.CONNUM
	AND b.CORLFI=a.CORLFI
	AND b.COACMN=a.COACMN
	AND b.COETBT=a.COETBT
	AND b.COIPTE=a.COIPTE
	AND b.cerdge=200000);
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 08h35   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par McM Voir le message
...
Code :
1
2
3
4
5
UPDATE tmsmdc2
SET cerdge= 1101010
WHERE (CONNUM, CORLFI, COACMN, COETBT, COIPTE) 
IN (SELECT DISTINCT CONNUM, CORLFI ,COACMN, COETBT, COIPTE 
		FROM tmsmdc2 WHERE cerdge=2000000);
...
Pas besoin de distinct.

Plus simple
Code :
1
2
3
4
 
UPDATE tmsmdc2
SET cerdge= 1101010
WHERE cerdge=2000000
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 10h15   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Citation:
Envoyé par mnitu Voir le message
Plus simple
Code :
1
2
3
4
 
UPDATE tmsmdc2
SET cerdge= 1101010
WHERE cerdge=2000000
Euh .. Non, tu peux très bien avoir ce cas :
Code :
1
2
3
CONNUM	CORLFI	COACMN	COETBT	COIPTE	cerdge
1	1	1	1	1	200000
1	1	1	1	1	0
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h25   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par McM Voir le message
Euh .. Non, tu peux très bien avoir ce cas :
...
C’est un cas qui visiblement m’a échappé.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h38.


 
 
 
 
Partenaires

Hébergement Web