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 :

[PL/SQL]Procédure qui se compile avec des erreurs


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 73
    Points : 29
    Points
    29
    Par défaut [PL/SQL]Procédure qui se compile avec des erreurs
    Bonjour à tous,
    j'essais de créer une procédure stockée mais je n'arrive pas à la compiler.
    La voici
    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
    create or replace
    procedure augmenterPrix 
    				(numType type.ntype%type, numfourn fournisseur.nfourn%type, prctg float) IS
    declare
    numpiece piece.npiece%type;
    cursor curseur_augmenter is
    	select npiece
    	from piece 
    	where fournisseur.nfourn = piece.nfourn
    	and ntype = numtype
    	and nfourn = numfourn;
    begin
    open curseur_augmenter;
    fetch curseur_augmenter into numpiece;
     
    while curseur_augmenter%found loop
    	update piece set prixpiece = prixpiece * prctg
    	where npiece= numpiece;
    	fetch curseur_augmenter into numpiece;
    end loop;
    close curseur_augmenter;
    end;
    Je li et reli mon code mais pas moyen de trouver la cause. J'ai un message d'erreur sur le IS et sur le end;.
    (petites précisions je taf sur sqldevelopper et ma base est sous oracle 10g express).

  2. #2
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Points : 146
    Points
    146
    Par défaut
    Salut

    Teste ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    BEGIN
    OPEN curseur_augmenter;
    LOOP
      FETCH curseur_augmenter INTO numpiece;
      EXIT WHEN curseur_augmenter%NOTFOUND;
     
      UPDATE piece SET prixpiece = prixpiece * prctg
      WHERE npiece= numpiece;
     
    END LOOP;
    ...
    Sylvain

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 73
    Points : 29
    Points
    29
    Par défaut
    Merci de ta réponse mais ça n'a rien changé, toujours les mêmes erreurs aux mêmes endroits.

  4. #4
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Points : 146
    Points
    146
    Par défaut
    Et ça dit quoi comme erreur ?
    et a quel endroit ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par yoann7 Voir le message
    Merci de ta réponse mais ça n'a rien changé, toujours les mêmes erreurs aux mêmes endroits.
    C'est n'est pas vraiment constructif quand on ne les fournit pas...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur(4,1): PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following:     begin function package pragma procedure subtype type use    <identificateur> <identificateur entre guillemets> form    current cursor external language The symbol "begin" was substituted for "DECLARE" to continue.
    Et si tu retirais ton DECLARE déjà ???

    Note : le forum n'est pas fait pour de la correction de syntaxe.

  7. #7
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    apres tout ca il semblerait que tu fasses intervenir 3 tables.

    mais dans ton code

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure augmenterPrix 
    				(numType type.ntype%type, numfourn fournisseur.nfourn%type, prctg float) IS
    declare
    numpiece piece.npiece%type;
    cursor curseur_augmenter IS
    	SELECT npiece
    	FROM piece 
    	WHERE fournisseur.nfourn = piece.nfourn
    	AND ntype = numtype
    	AND nfourn = numfourn;

    la syntaxe n'est pas bonne

    regarde dans la doc comment on fait pour les jointures ....

    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT C.CLI_ID, C.CLI_NOM, T.TEL_NUMERO, E.EML_ADRESSE, A.ADR_VILLE
    FROM T_CLIENT C, T_TELEPHONE T, T_ADRESSE A, T_EMAIL E
    WHERE C.CLI_ID = T.CLI_ID
      AND C.CLI_ID = A.CLI_ID
      AND C.CLI_ID = E.CLI_ID

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 73
    Points : 29
    Points
    29
    Par défaut
    Merci pour les réponses, j'ai enlever la jointure: elle ne servait a rien en fait car je travail que dans une table.
    J'ai enlevé le declare, et maintenant j'ai 2 erreurs dans la requête.

    Error(6,2): PL/SQL: SQL Statement ignored
    error(8,2): PL/SQL:ORA-00933: la commande SQL ne se termine pas correctement

    Mon code:
    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
    create or replace
    procedure augmenterPrix 
    				(numType type.ntype%type, numfourn fournisseur.nfourn%type, prctg float) IS
    numpiece piece.npiece%type;
    cursor curseur_augmenter is
    	select npiece
    	from piece 
    	and ntype = numtype
    	and nfourn = numfourn;
    begin
    open curseur_augmenter;
    fetch curseur_augmenter into numpiece;
    while curseur_augmenter%found loop
    	update piece set prixpiece = prixpiece * prctg
    	where npiece= numpiece;
    	fetch curseur_augmenter into numpiece;
    end loop;
    close curseur_augmenter;
    end;

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select npiece
    	from piece 
    	and ntype = numtype
    	and nfourn = numfourn;
    As-tu fais l'effort de lire et de comprendre ce que tu fais ?
    Pour écrire une requête sql, je te conseille le lien suivant pour commencer : http://tahe.developpez.com/divers/sql/
    On va mettre ça sur le coup du surmenage...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 73
    Points : 29
    Points
    29
    Par défaut
    effectivement, le surmenage je viens de voir...
    c'est bon la procédure est compilée.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Maintenant que tu as compris les curseurs, tu peux aussi utiliser la version simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create or replace
    procedure augmenterPrix
      (
        numType type.ntype%type,
        numfourn fournisseur.nfourn%type,
        prctg float )
    IS 
      update piece 
        set prixpiece = prixpiece * prctg 
        where npiece = numpiece 
             and ntype = numtype ;
      commit;
    end;
    /

  12. #12
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Points : 146
    Points
    146
    Par défaut
    D'ailleurs dans la version précédente, il ne faut pas oublier le commit.
    =>Cf. la version simple

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE
    procedure augmenterPrix
      (
        numType type.ntype%type,
        numfourn fournisseur.nfourn%type,
        prctg float )
    IS 
      UPDATE piece 
        SET prixpiece = prixpiece * prctg 
        WHERE ntype = numtype 
    	 and nfourn = numfourn;
      commit;
    end;
    /

Discussions similaires

  1. Trigger compilé avec des erreurs
    Par Sh4dow49 dans le forum SQL
    Réponses: 2
    Dernier message: 17/04/2009, 14h19
  2. [Maven] Compilation avec des librairies
    Par pamic dans le forum Maven
    Réponses: 3
    Dernier message: 03/07/2006, 11h29
  3. [SQL] Requête dans une requête...avec des INNER JOIN!
    Par PedroBD dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 06/04/2006, 08h26
  4. Compilation avec des fonctions virtuel pure
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 16/12/2005, 14h37
  5. [PL/SQL]Procédure qui ne se finit pas...
    Par tscoops dans le forum Oracle
    Réponses: 8
    Dernier message: 13/12/2004, 15h53

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