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

SQL Oracle Discussion :

Procedure : déclaration et affectation de variable


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Par défaut Procedure : déclaration et affectation de variable
    [FONT=Times New Roman]Bonjour,[/FONT]

    [FONT=Times New Roman]J'ignore si certains travaillent encore à cette heure au bureau, moi j'y suis et je me demande comment modifier cette procédure PL/SQL pour qu'elle marche :[/FONT]

    [FONT=Times New Roman]CREATE OR REPLACE PROCEDURE TABLE_INSERT([/FONT]
    [FONT=Times New Roman] VersionLbl IN VARCHAR2(30), CommentLbl IN VARCHAR2(200)) IS[/FONT]
    [FONT=Times New Roman]BEGIN[/FONT]
    [FONT=Times New Roman] DECLARE newId NUMBER;[/FONT]
    [FONT=Times New Roman] newId := SELECT MAX(id) FROM REQM_TOOL_VERSION;[/FONT]
    [FONT=Times New Roman] INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) VALUES ( [/FONT]
    [FONT=Times New Roman]newId, VersionLbl, CommentLbl);[/FONT]
    [FONT=Times New Roman] COMMIT;[/FONT]
    [FONT=Times New Roman]END;[/FONT]
    [FONT=Times New Roman]/[/FONT]

    Et à cause de documentations contradictoires, je vous demande de me le confirmer : un appel à la procédure peut bien se faire par la commande EXECUTE TABLE_INSERT('5.0', 'Voilà pourquoi') ?

    Merci ; Sam

  2. #2
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    Merci d'utiliser la balide code, donc après avoir mis cette balise on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE PROCEDURE TABLE_INSERT(
     VersionLbl IN VARCHAR2(30), CommentLbl IN VARCHAR2(200)) IS
    BEGIN
     DECLARE newId NUMBER;
     newId := SELECT MAX(id) FROM REQM_TOOL_VERSION;
     INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) 
    VALUES ( 
    newId, VersionLbl, CommentLbl);
     COMMIT;
    END;
    cette ligne ne peut pas fonctionner en PL/SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     newId := SELECT MAX(id) FROM REQM_TOOL_VERSION;
    ça s'écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT MAX(id) INTO  newId FROM REQM_TOOL_VERSION;
    DECLARE n'est pas à utiliser dans une procédure.

    Un commit dans un procédure n'est pas recommandé, en tout cas pas de cette façon il faut une gestion d'exception, et un ROLLBACK en cas de souci.

    Donc ça donnerait, si je n'ai pas laissé passer d'autres erreurs:

    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
    CREATE OR REPLACE PROCEDURE TABLE_INSERT(
     VersionLbl IN VARCHAR2(30), CommentLbl IN VARCHAR2(200)) IS
        newId NUMBER;
    BEGIN
        SELECT MAX(id) INTO newId  FROM REQM_TOOL_VERSION; -- modifié le 14/1/07 copier,coller intempestif
        INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) 
        VALUES 
        (newId, VersionLbl, CommentLbl);
        COMMIT;
    EXCEPTION  
        WHEN OTHERS THEN
            raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
            ROLLBACK;
    END;
    /
    edit:
    Citation Envoyé par samworld Voir le message
    un appel à la procédure peut bien se faire par la commande EXECUTE TABLE_INSERT('5.0', 'Voilà pourquoi') ?
    oui, une fois que le reste sera corrigé. Si tu utilises TOAD il te donne l'impression que ça "compile" mais souvent il ne detectes pas d'erreur à moins d'utiliser l'onglet de création de procédure idoine.

    edit 14/1/07:
    SELECT MAX(id) INTO newId FROM REQM_TOOL_VERSION; -- modifié le 14/1/07 copier,coller intempestif , newId:=SELECT MAX(id) FROM était faux

  3. #3
    Invité
    Invité(e)
    Par défaut
    Il y a encore du monde au bureau, il est juste midi vingt!! Doucement sur l'ethnocentrisme !

    Bon, déjà, affiche un formattage lisible de ton message, je ne ferais pas l'effort une autre fois.
    Et utilise aussi la balise [ code ] [ /code ] pour le code...

    J'ai jeté un oeil sur ton code et visiblement tu ne maitrises pas le PL/SQL alors je te renvois sur http://sheikyerbouti.developpez.com/pl_sql/
    Regarde les messages de compilation, ils sont tout de même assez explicite...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 50
    Par défaut
    Attention à la déclaration des types de tes paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( param1 IN VARCHAR2, param2 IN VARCHAR2 )
    (et oui on ne spécifie pas la taille).

    Que penses-tu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE PROCEDURE TABLE_INSERT(
     VersionLbl IN VARCHAR2, CommentLbl IN VARCHAR2) IS
    BEGIN
        INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) 
        VALUES 
        ((SELECT MAX(id) FROM REQM_TOOL_VERSION), VersionLbl, CommentLbl);
        COMMIT;
    EXCEPTION  
        WHEN OTHERS THEN
            raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
            ROLLBACK;
    END;
    /

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

Discussions similaires

  1. Déclaration et affectation de variables
    Par herzak dans le forum Android
    Réponses: 4
    Dernier message: 08/11/2013, 12h37
  2. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14
  3. [Stored Procedure]Only constants, expressions, or variables
    Par nmerydem dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 20/10/2004, 18h29
  4. [PS] affectation de variable
    Par madmortal dans le forum SQL
    Réponses: 2
    Dernier message: 01/09/2004, 13h17
  5. script SQL : affectation de variables
    Par Laura dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/10/2003, 21h32

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