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

Oracle Discussion :

Erreurs dans une procédure


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Erreurs dans une procédure
    Salut,

    J'ai un problème avec une procédure que je n'arrive pas à débuger. Pouvez vous me donner un coup de main s'il vous plaît.

    J'ai 2 tables media et son. Son hérite de média.

    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
    CREATE TABLE media
    (
    	numMedia integer NOT NULL,
    	titre varchar2(50) NOT NULL,
    	auteur varchar2(50),
    	extension char(4) NOT NULL,
    	chemin varchar2(100) NOT NULL,
    	constraint PK_MEDIA_NUMMEDIA primary key (numMedia),
    	constraint CK_MEDIA_EXTENSION check (extension like ('.%'))
    );
     
    CREATE TABLE sons
    (
    	numMedia integer NOT NULL,
    	duree timestamp NOT NULL,	
    	constraint PK_SONS_NUMMEDIA primary key (numMedia),
    	constraint FK_SONS_NUMMEDIA foreign key (numMedia) REFERENCES mediamobile.media (numMedia) ON DELETE CASCADE
    );
    Le but de la procédure est de permettre l'insertion "quasi-simultanée" d'un media dans la table mère et fille avec le même numéro de média.

    voici la procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE or replace PROCEDURE mediamobile.nvo_son (mtitre varchar2, mauteur varchar2, mextension char, mchemin varchar2, mduree timestamp)
    IS
    mnum integer;
    BEGIN
    	SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
    	execute immediate 'insert into media values (seq_media.nextval ,'||mtitre||','||mauteur||','||mextension||','||mchemin||')';
    	insert into sons values (mnum, mduree);
    END;
    /
    avec les messages d'erreur à son exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    - Erreurs constatées : 
     
    ERREUR à la ligne 1:
    ORA-00917 : virgule absente
    ORA-06512 : à "MEDIAMOBILE.NVO_SON", ligne 6
    ORA-06512 : à ligne 1
    Merci.

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Salut,
    Je ne sais pas si je vais être d'un grand secours, essaye ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute immediate 'insert into media values (seq_media.nextval ,'''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
    Je pense que tes différents champs doivent être entouré de quotes.

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kalyparker
    Je ne sais pas si je vais être d'un grand secours, essaye ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute immediate 'insert into media values (seq_media.nextval ,'''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
    Je pense que tes différents champs doivent être entouré de quotes.
    Merci pour ton aide.
    J'ai encore une erreur mais différente .

    J'ai mis à jour la procédure --> ca passe
    J'ai testé l'insertion (exe de la proc) --> ca casse

    Rapport des erreurs :
    ORA-02291 : violation de contrainte d'intégrité (Nom de la contrainte) - clé parent introuvable
    ORA-06512 : à "MEDIAMOBILE.NVO_SON", ligne 7
    ORA-06512 : à ligne 1

  4. #4
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    L'erreur viens peut être du fait que tu n'a pas le même numéro de séquence sur tes 2 insertions...

    Lorsque tu fais :
    SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;

    je crois que tu avances ta séquence du pas que tu as défini.
    Lorsque tu fais ton insert dans media tu refais un nextval
    Essaye en mettant mnum dans media.

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kalyparker
    L'erreur viens peut être du fait que tu n'a pas le même numéro de séquence sur tes 2 insertions...

    Lorsque tu fais :
    SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;

    je crois que tu avances ta séquence du pas que tu as défini.
    Lorsque tu fais ton insert dans media tu refais un nextval
    Essaye en mettant mnum dans media.
    Que faut-il que je mette alors ?

  6. #6
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Je ne suis pas sûre du résultat, je n'ai pas encore installé oracle chez moi alors je peux pas tester...

    Mais si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
    execute immediate 'insert into media values ('||mnum||','''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
    INSERT INTO sons VALUES (mnum, mduree);
    Je pense que ça peux marcher

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kalyparker
    si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
    execute immediate 'insert into media values ('||mnum||','''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
    INSERT INTO sons VALUES (mnum, mduree);
    Encore une erreur décidément :s.

    ORA-01722: Nombre non valide
    ORA-06512: à "MEDIAMOBILE.NVO_SON", ligne 1
    ORA-06512 : à ligne 1

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Finalement j'ai tout effacé et tout recommencé et ça marche :
    Merci pour ton aide kalyparker

    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
     
    CREATE or REPLACE PROCEDURE mediamobile.nvo_son (mtitre varchar2, mauteur varchar2, mextension char, mchemin varchar2, mduree timestamp)
    IS
    mnum
    integer;
    sqlstt
    varchar(100);
    BEGIN
    SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
    sqlstt:= 'insert into media values (:1,:2,:3,:4,:5)';
    execute immediate sqlstt using mnum,mtitre,mauteur,mextension,mchemin;
    commit;
    insert into sons values (mnum, mduree);
    END
    ;
    /

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut


    et pourquoi pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR REPLACE PROCEDURE mediamobile.nvo_son (mtitre varchar2, mauteur varchar2, mextension char, mchemin varchar2, mduree timestamp)
    IS
    mnum integer;
    BEGIN
    SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
    insert into media values (mnum,mtitre,mauteur,mextension,mchemin);
    INSERT INTO sons VALUES (mnum, mduree);
    commit;
    END
    ;
    /
    ?

  10. #10
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Merci pour ton aide kalyparker
    De rien, l'essentiel est que ça marche

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

Discussions similaires

  1. [8i] Erreur dans une procédure
    Par apersonnat dans le forum SQL
    Réponses: 5
    Dernier message: 01/07/2008, 18h16
  2. Réponses: 5
    Dernier message: 01/04/2008, 13h00
  3. un erreur dans une procédure
    Par jack_1981 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/01/2008, 13h44
  4. Renvoyer une erreur dans une procédure stockée
    Par SLt dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/04/2007, 19h41
  5. Comment lancer une erreur dans une procédure stockée
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2005, 18h06

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