IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Petit PL/SQL qui veut pas


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    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 :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 391
    Points
    18 391
    Par défaut
    Chaque instruction doit se terminer par un point virgule.

    Le tout premier message d'erreur vous indique un emplacement clef :
    ORA-06550: Ligne 9, colonne 34 :
    PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour l'erreur Waldar a répondu, mais normalement, le loop ne sert à rien, un simple update suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par McM Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE tmsmdc2
    SET cerdge= 1101010
    WHERE cerdge=2000000

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE tmsmdc2
    SET cerdge= 1101010
    WHERE cerdge=2000000
    Euh .. Non, tu peux très bien avoir ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONNUM	CORLFI	COACMN	COETBT	COIPTE	cerdge
    1	1	1	1	1	200000
    1	1	1	1	1	0

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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é.

Discussions similaires

  1. [SQL 2000] Kill sur SPID qui veut pas
    Par zooffy dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 08/11/2007, 11h06
  2. [SQL] UPDATE qui veut pas updater ma base
    Par Weysan dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/08/2007, 18h44
  3. Petit problème d''info-bulle sur image qui veut pas se supprimer
    Par Machiavel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 01/03/2007, 15h52
  4. ShellExecute qui veut pas faire son boulot...
    Par giloutho dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/08/2005, 11h49
  5. java web start qui veut pas se lancer
    Par calvin dans le forum JWS
    Réponses: 4
    Dernier message: 30/06/2004, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo