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 :

Declare dans une SP


Sujet :

SQL Oracle

  1. #1
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut Declare dans une SP
    J'ai cette SP toute simple mais il ne veut pas de mon declare. j'ai pourtant besoin de cette variable pk_f (j'ai simplifié la SP, il manque du code qui justement, utilise cette variable)

    Quelqu'un saurait comment dois-je mettre ce simple petit declare pour avoir une variable de type number que je puisse modifier. je n'ai pas besoin de la retourner au final (out)

    merci d'avance

    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
    CREATE OR REPLACE PROCEDURE sp_createalertfile (
       p_id               OUT      NUMBER,
       p_usr              IN       VARCHAR2 DEFAULT '',
       p_global_comment   IN       VARCHAR2 DEFAULT '',
       p_file             IN       VARCHAR2
    )
    AS
    DECLARE pk_file number;
    BEGIN
       SELECT pk_file
         INTO pk_f
         FROM t_files
        WHERE file_name = p_file;
     
       INSERT INTO t_alerts
                   (pk_alert, pk_file, global_comment, created_on, created_by
                   )
            VALUES (sq_alert.NEXTVAL, pk_f, p_global_comment, SYSDATE, p_usr
                   );
     
       SELECT sq_alert.CURRVAL
         INTO pk_id
         FROM DUAL;
    END sp_createalertfile;
    /
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

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

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Tu confonds entre SQL server et Oracle. On utilise IS sous Oracle pour débuter proprement dit la procédure. De plus, contrairement à du PL/SQL seul sans procédure, le mot clé DECLARE n'est pas utilisé. La déclaration de variable se fait entre le IS et le BEGIN.

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    je sais que AS vient de MSSQL mais pourtant, sous TOAD, ca compile et je crois meme que ca marche :/

    par contre (et donc avec le "IS")

    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
    CREATE OR REPLACE PROCEDURE sp_createalertfile (
       p_id               OUT      NUMBER,
       p_usr              IN       VARCHAR2 DEFAULT '',
       p_global_comment   IN       VARCHAR2 DEFAULT '',
       p_file             IN       VARCHAR2
    )
    IS
    DECLARE pk_file number;
    BEGIN
       SELECT pk_file
         INTO pk_f
         FROM t_files
        WHERE file_name = p_file;
     
       INSERT INTO t_alerts
                   (pk_alert, pk_file, global_comment, created_on, created_by
                   )
            VALUES (sq_alert.NEXTVAL, pk_f, p_global_comment, SYSDATE, p_usr
                   );
     
       SELECT sq_alert.CURRVAL
         INTO pk_id
         FROM DUAL;
    END sp_createalertfile;
    /
    ca marche pas plus pour moi exactement la même erreur qu'avec le AS

    et si j'enleve le mot "DECLARE", ca plante plus loin en me disant "pk_f must be declared"
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

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

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Je ne pense pas me tromper car je vois que tu déclares pk_file mais tu cherches à remplir pk_f qui n'est déclaré nul part.

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Citation Envoyé par phili_b Voir le message
    Je ne pense pas me tromper car je vois que tu déclares pk_file mais tu cherches à remplir pk_f qui n'est déclaré nul part.


    effectivement. c'était un mixte de coquille, plus mot clé DECLARE inutile(voire bloquant) et le mot AS

    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
    CREATE OR REPLACE PROCEDURE sp_createalertfile (
       p_id               OUT      NUMBER,
       p_usr              IN       VARCHAR2 DEFAULT '',
       p_global_comment   IN       VARCHAR2 DEFAULT '',
       p_file             IN       VARCHAR2
    )
    IS
      pk_f number;
    BEGIN
       SELECT pk_file
         INTO pk_f
         FROM t_files
        WHERE file_name = p_file;
     
       INSERT INTO t_alerts
                   (pk_alert, pk_file, global_comment, created_on, created_by
                   )
            VALUES (sq_alert.NEXTVAL, pk_f, p_global_comment, SYSDATE, p_usr
                   );
     
       SELECT sq_alert.CURRVAL
         INTO p_id
         FROM DUAL;
    END sp_createalertfile;
    /

    merci
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Je crois comprendre que tu considère l'utilisatio du mot AS comme erronée ...
    En fait AS ou IS sont utilisables dans ce cas sans aucune différence
    Consultant et formateur Oracle

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

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    (ha! j'avais jamais fait gaffe qu'on pouvait mettre indifféremment AS et IS )

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073

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

Discussions similaires

  1. Retourner les objets declaré dans une classe
    Par slix_alex dans le forum Général Java
    Réponses: 2
    Dernier message: 24/03/2011, 19h00
  2. Declaration dans une condition
    Par mhn127 dans le forum C++
    Réponses: 1
    Dernier message: 18/01/2007, 07h27
  3. declaration dans une Boucle
    Par fastzombi dans le forum C++
    Réponses: 9
    Dernier message: 29/05/2006, 14h20
  4. Réponses: 2
    Dernier message: 17/12/2005, 20h52
  5. declarer plusieur elements dans une variable ?
    Par freebug dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 28/06/2005, 13h46

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