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 :

procedure stockée erreur


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut procedure stockée erreur
    Bonjour, je suis en train d'essayer de faire une procédure stockée mais lorsque je l'éxécute dans SQL/PLUS, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Avertissement : Procédure créée avec erreurs de compilation.
    Le code de ma procédure stockée est :
    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
     
    CREATE OR REPLACE PROCEDURE ps_concat_crit(IN etab_naiss integer,IN no_immeuble integer,IN no_lot char(5)) AS
     
    CURSOR GetCrit IS SELECT * FROM P_DESG WHERE  DSG_Domaine_Appli='Lot' AND DSG_No_Etab_Nais=etab_naiss AND DSG_No_Immeuble=no_immeuble AND DSG_No_Lot=no_lot;
    CURSOR existEnreg IS SELECT COUNT(*) FROM T_Lots_crit WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
     
    crits varchar2;
    niu_courant P_DESG%ROWTYPE;
    NbEnreg integer;
     
    BEGIN
     
     FOR niu_courant IN GetCrit
     LOOP
       crits := ltrim(rtrim(crits)) || 'NIU' || niu_courant.DSG_NIU || '=' || niu_courant.DSG_Valeur_descriptif || ';';
     END LOOP;
     
     FOR NbEnreg IN existEnreg
     LOOP
      IF NbEnreg=0 THEN
        INSERT INTO T_Lots_crit(TLC_No_Etab_Naiss,TLC_No_Imm,TLC_No_Lot,TLC_Crit) VALUES (etab_naiss,no_immeuble,no_lot,crits);
      ELSE
        UPDATE T_Lots_crit SET TLC_Crit=crits WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
      END IF; 
     END LOOP;
    END;
    Si quelqu'un a une idée ou une piste pour que j'arrive a compiler cette procédure stockée correctement je suis preneur.
    Merci d'avance.

  2. #2
    Membre Expert 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
    Par défaut
    Bonjour,

    sous sqlplus
    par exemple apres avoir lancé la proce de creation

    tu fais

    au moins on va voir les erreurs

    c'est un bon debut

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut
    Je viens de faire ce que tu m'

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut
    Je viens de faire ce que tu m'as dit du coup j'ai réussi a corriger quelque erreur par contre j'ai une erreur que je ne comprend pas la je te redonne la procédure stockée modifié :
    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
     
    CREATE OR REPLACE PROCEDURE ps_concat_crit(etab_naiss IN integer, no_immeuble IN integer, no_lot IN char) AS
     
    CURSOR GetCrit IS SELECT * FROM P_DESG WHERE  DSG_Domaine_Appli='Lot' AND DSG_No_Etab_Nais=etab_naiss AND DSG_No_Immeuble=no_immeuble AND DSG_No_Lot=no_lot;
    CURSOR existEnreg IS SELECT COUNT(*) FROM T_Lots_crit WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
     
    crits varchar2(30000);
    niu_courant P_DESG%ROWTYPE;
    NbEnreg integer;
     
    BEGIN
     
     FOR niu_courant IN GetCrit LOOP
       crits := TRIM(crits) || 'NIU' || To_char(niu_courant.DSG_NIU) || '=' || niu_courant.DSG_Valeur_descriptif || ';';
     END LOOP;
     
     FOR NbEnreg IN existEnreg LOOP
      IF (NbEnreg=0) THEN
        INSERT INTO T_Lots_crit(TLC_No_Etab_Naiss,TLC_No_Imm,TLC_No_Lot,TLC_Crit) VALUES (etab_naiss,no_immeuble,no_lot,crits);
      ELSE
        UPDATE T_Lots_crit SET TLC_Crit=crits WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
      END IF; 
     END LOOP;
    END;
    /
    SET serverout ON
    show error
    et le message d'erreur que je ne comprend pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Avertissement : Procédure créée avec erreurs de compilation.
     
    Erreurs pour PROCEDURE PS_CONCAT_CRIT :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    17/3     PL/SQL: Statement ignored
    17/14    PLS-00306: numéro ou types d'arguments erronés dans appel à '='
    Merci de m'aider la je sèche.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Par défaut
    Il n'y a pas les numéros de ligne, tu peux les afficher ou bien indiquer laquelle est ta ligne 17? (je ne sais pas si ça prend en compte les lignes vides...)

    C'est surement une erreur du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE TLC_No_Etab_Naiss=etab_naiss
    alors que etab_naiss est un integer, alors que TLC_No_Etab_Naiss est défini comme une chaine dans ta table.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut
    Merci pour ton aide, je viens de trouver la solution voici le code de ma procedure stockée :
    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
    29
    30
     
    CREATE OR REPLACE PROCEDURE ps_concat_crit(etab_naiss IN integer, no_immeuble IN integer, no_lot IN char) AS
     
    CURSOR GetCrit IS SELECT * FROM P_DESG WHERE  DSG_Domaine_Appli='Lot' AND DSG_No_Etab_Nais=etab_naiss AND DSG_No_Immeuble=no_immeuble AND DSG_No_Lot=no_lot;
    CURSOR existEnreg IS SELECT COUNT(*) FROM T_Lots_crit WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
     
    crits varchar2(30000);
    niu_courant P_DESG%ROWTYPE;
    NbEnreg integer;
     
    BEGIN
     
     FOR niu_courant IN GetCrit LOOP
       crits := TRIM(crits) || 'NIU' || To_char(niu_courant.DSG_NIU) || '=' || niu_courant.DSG_Valeur_descriptif || ';';
     END LOOP;
     
     OPEN existEnreg;
     LOOP
      FETCH existEnreg INTO NbEnreg;
       IF (NbEnreg=0) THEN
         INSERT INTO T_Lots_crit(TLC_No_Etab_Naiss,TLC_No_Imm,TLC_No_Lot,TLC_Crit) VALUES (etab_naiss,no_immeuble,no_lot,crits);
       ELSE
         UPDATE T_Lots_crit SET TLC_Crit=crits WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
       END IF; 
      EXIT WHEN existEnreg%NOTFOUND;
     END LOOP;
    END;
    /
    SET serverout ON
    show error
    La ligne 17 correspond a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF (NbEnreg=0) THEN
    Par contre du coup je me demande si mon insert ce fait ou pas? si je quitte lorsque je ne trouve de count(*)?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur procedure stockée oracle
    Par gg2vig dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 10/09/2007, 14h42
  2. Erreur dans procedure stockées
    Par freud dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/07/2007, 11h13
  3. Erreur 450 avec une procedure stockée : Access/VB6
    Par poissonsoluble dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 30/05/2007, 10h14
  4. Erreur creation procedure stockées (Firebird1.5+delphi 7)
    Par nassoft dans le forum Bases de données
    Réponses: 3
    Dernier message: 18/05/2007, 12h30
  5. Impossible de créer des procedures stockée ==> ERREUR 106
    Par JMS_PCO dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 27/02/2006, 17h33

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