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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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;
    /

  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 : 54
    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
    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
    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"

  4. #4
    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 : 54
    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
    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
    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

  6. #6
    Membre chevronné
    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
    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

+ 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