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 Firebird Discussion :

[debutant] Procédure stockée


Sujet :

SQL Firebird

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut [debutant] Procédure stockée
    Bonjour à tous,

    J'ai besoin d'une petite aide de base....
    J'essaye dans IBAccess de créer une procédure stockée via ExecSQL, mais j'ai un message d'erreur. Comme je débute (plutôt devrais-je dire, comme j'explore) avec Interbase (la v6.01 open source), je ne comprends pas le message d'erreur suivant (ok, c'est un pb d'orthographe mais lequel...?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL PARSE ERROR
    Paramater name expected
    Voici le code de ma PS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create procedure prsPluvioStation(MaStation integer)
    returns (Jour Date, Pluie float)
    as
    begin
      Select Jour, Pluie
      from Pluviometrie
      where CodeStation = : MaStation
      into : Jour , : Pluie ;
      suspend ;
    end;
    La structure de la table Pluviometrie est assez simple (c'est une table contenant des données historique de quantité de pluie tombée par jour sur une station pluviométrique...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Table Pluviometrie:
    CodeStation : integer indexé
    Jour            : date
    Pluie           : float
    Comme tout bon débutant j'ai dû oublié quelque chose....
    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Points : 209
    Points
    209
    Par défaut
    c'est normal les espaces entre les : et les variables ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    = : MaStation 
      into : Jour , : Pluie ;

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: [debutant] Procédure stockée
    Essayez plutot ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    create procedure prsPluvioStation(MaStation integer)
    returns (Jour Date, Pluie float)
    as
    begin
      For Select Jour, Pluie
      from Pluviometrie
      where CodeStation = :MaStation
      into :Jour , :Pluie 
      do
      begin
        suspend;
      end
    end;
    Car votre select retourne plusieurs lignes (je suppose...)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    En effet, pour l'espace entre les : et les variables de retour, celà provoquait le message d'erreur du parser...

    Donc, je progresse... mais en essayant ta solution barbibulle, j'ai le même message d'erreur qu'après correction(des espaces) de ma PS initiale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dynamic SQL Error
    SQL error code=-104
    token unkown, line 8 char 6
    ?.
    donc, avec ce code SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create procedure prsPluvioStation(MaStation integer)
    returns (LeJour Date, LaPluie float)
    as
    begin
      For Select Jour, Pluie
      from Pluviometrie
      where CodeStation = :MaStation
      into :LeJour , :LaPluie
      do
      begin
        suspend;
      end
    end;
    ça ne fonctionne toujours pas... (j'ai renommé mes variable de retour.. on ne sait jamais...). Remarquez qu'en plus, la ligne 8 et caractère 6, c'est "into" : il comprends pas into :
    Ceci dit barbibulle, je reprends la structure de ta PS: c'est elle qu'il me faut car oui j'ai plusieurs enregistrements... (et merci de info du "comment faire" car je n'en avais pas la moindre idée...).
    Question subsidiaire.... existe t'il un calatoge des codes erreur SQL d'interbase?

  5. #5
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Les noms des colonnes de votre table sont en majuscule ou comme vous l'avez marqué ?
    Vous etes bien en Dialect 3 ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Re...

    Oui, je suis en Dialect 3 et les noms de la table comme des champs sont corrects au niveau casse....

    C'est pas évident évident finalement les PS sous Interbase...

  7. #7
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Donc si vous avez déclaré vos colonnes en utilisant les minuscules il faut encadrer par des doubles quotes...choses qu'il est inutile de faire quand on prend soit de n'utiliser que des majuscules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create procedure prsPluvioStation(MaStation integer) 
    returns (LeJour Date, LaPluie float) 
    as 
    begin 
      For Select "Jour", "Pluie" 
      from "Pluviometrie" 
      where "CodeStation" = :MaStation 
      into :LeJour , :LaPluie 
      do 
      begin 
        suspend; 
      end 
    end;
    Alors que si vous utilisez une déclaration de table avec des majuscules vous pouvez apres utiliser sans les doubles quotes et aussi bien en majuscule qu'en minuscule...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Salut,

    Merci pour tes informations... je créerai donc les tables avec des noms de colonne en majuscule à l'avenir... Ceci dit, en suivant tes recommandations, j'avais encore le même message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dynamic SQL Error 
    SQL error code=-104 
    token unkown, line 8 char 6 
    ?.
    Donc, en supposant que le pb de maj/min soit résolu par les doubles quotes, j'avais tjs ce pb à la line 8... classiquement, soit c'est un pb de reconnaissance du mot réservé into soit un pb dans mes variables.... en retirant à tout hasard le : devant les variables de retour comme celà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create procedure prsPluvioStation(MaStation integer)
    returns (LeJour Date, LaPluie float)
    as
    begin
      for Select "Jour", "Pluie"
      from "Pluviometrie"
      where "CodeStation" = :MaStation
      into LeJour , LaPluie
      do
      begin
        suspend;
      end
    end;
    ... c'est enfin, passé !!!

    Donc mon pb est presque résolu (faut encore que je teste tout ça...) mais j'ai encore une questions à ce sujet. Est-ce normal de devoir retirer ces : devant les variables de retour???

    Et aussi merci de votre aide à tous.

  9. #9
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Ca marche sans je crois mais normalement il faut les mettre.
    Ceci dit moi je travaille avec IBExpert et celui ci me transforme mes variables d'entrée et sortie en majuscule automatiquement je ne sais pas si c'est lui ou interbase toujours est il que j'essayerai ceci :

    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 procedure PRS_PLUVIO_STATION(MA_STATION integer)
    returns (LE_JOUR Date, LA_PLUIE float)
    as
    begin
      for Select "Jour", "Pluie"
      from "Pluviometrie"
      where "CodeStation" = :MA_STATION
      into 
        :LE_JOUR,
        :LA_PLUIE
      do
      begin
        suspend;
      end
    end;
    Sinon

    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 procedure PRS_PLUVIO_STATION("MaStation" integer)
    returns ("LeJour" Date, "LaPluie" float)
    as
    begin
      for Select "Jour", "Pluie"
      from "Pluviometrie"
      where "CodeStation" = :"MaStation"
      into 
        :"LeJour",
        :"LaPluie"
      do
      begin
        suspend;
      end
    end;
    Mais franchement mettez des majuscules partout (table, PS etc..) et vous n'aurez jamais de problemes de ce type...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Salut...

    Ben non, c'est pas bon... à mon avis, je vais refaire une table qu'avec des majuscules et retester tout ça....
    En effet, j'ai tjs le même mesage d'erreur (cette fois-ci vue sous IBConsole avec l'une de tes deux propositions -qui donnent le même message d'erreur...-):
    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
    Dynamic SQL Error
    SQL error code = -104
    Unexpected end of command
    Statement: create procedure PRS_PLUVIO_STATION("MaStation" integer)
    returns ("LeJour" Date, "LaPluie" float)
    as
    begin
     for Select "Jour", "Pluie"
     from "Pluviometrie"
     where "CodeStation" = :"MaStation"
     into
      :"LeJour",
      :"LaPluie"
     do
     begin
      suspend
    Apparement, maintenant, c'est au niveau du suspend et c'est le ; qui doit le choquer quelque part.... :

    Dernière question: tu parles d'IBExpert... J'ai pas trouvé de lien sur ce soft t'as une adresse à me donner stp?
    Merci pour tout ça

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Bon..... là, c'est rude... j'ai essayé de tout recommencer proprement (avec les majuscules), et je n'y arrive plus.

    Alors, voilà.... je vous donne toutes les commandes que j'ai créé en sql pour faire (avec Interbase 6.0.1.0):
    1- la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE "PLUVIOMETRIE" 
    ("CODESTATION" INTEGER NOT NULL, "JOUR"	DATE NOT NULL, "PLUIE" FLOAT);
    2- la procédure 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
    CREATE PROCEDURE "PRSPLUIE" (MASTATION INTEGER)
    RETURNS ("LEJOUR" DATE, "LAPLUIE" FLOAT)
    AS
    begin
      for Select "JOUR", "PLUIE"
      from "PLUVIOMETRIE"
      where "CODESTATION" = :"MASTATION"
      into :"LEJOUR" , :"LAPLUIE"
      do
      begin
        suspend;
      end
    end
    mais j'ai toujouors ce sacré sgeugneugneu de message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dynamic SQL Error
    SQL error code = -104
    Unexpected end of command
    Statement: CREATE PROCEDURE "PRSPLUIE" (MASTATION INTEGER)
    RETURNS ("LEJOUR" DATE, "LAPLUIE" FLOAT)
    AS
    begin
     for Select "JOUR", "PLUIE"
     from "PLUVIOMETRIE"
     where "CODESTATION" = :"MASTATION"
     into :"LEJOUR" , :"LAPLUIE"
     do
     begin
      suspend
    qui s'achève toujours sur le suspend.... ou avant lui...

    Alors, si quelqu'un peut essayer chez lui ces commandes via un copier/coller et me dire si ça fonctionne... ce serait sympa....

    Merci d'avance...
    : HELP ME

  12. #12
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Chez moi ceci fonctionne tres bien :


    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 TABLE PLUVIOMETRIE (
        CODESTATION  INTEGER NOT NULL,
        JOUR         DATE NOT NULL,
        PLUIE        FLOAT
    );
     
    SET TERM ^ ;
     
    CREATE PROCEDURE PRSPLUIE (
        MASTATION INTEGER)
    RETURNS (
        LEJOUR DATE,
        LAPLUIE FLOAT)
    AS
    begin 
      for Select JOUR, PLUIE
      from PLUVIOMETRIE
      where CODESTATION = :MASTATION
      into :LEJOUR , :LAPLUIE
      do 
      begin 
        suspend; 
      end 
    end^
    SET TERM ; ^

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Salut,

    N'ayant pas Interbase installé à la maison ni l'ADSL pour le télécharger, j'essaierai un copier coller de ton code dès Lundi au boulot. Si ça fonctionne chez toi, y'a pas de raison que ça ne fonctionne pas chez moi, sinon, y'a un pb de fluide de mon côté....

    Merci encore pour ton aide

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Salut à tous, salut Barbibulle...

    Bon... le copier/coller de ton code a marché à 100%....

    Donc merci à toi. Maintenant, il faut que je comprenne la différence entre ton code et les manips SQL que je faisais et qui ne fonctionnaient pas.

    Merci encore. Allez, zou... [RESOLU] (j'sais pas comment on note celà dans le titre: si je modifie mon titre, résolu est en bleu... donc je pense que ce doit être le modo qui mets cette mention...)

  15. #15
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par Vincent BONNAL
    [RESOLU] (j'sais pas comment on note celà dans le titre: si je modifie mon titre, résolu est en bleu... donc je pense que ce doit être le modo qui mets cette mention...)
    Tout en bas de la page il y a le bouton 'Mettre RESOLU'.

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

Discussions similaires

  1. [debutant] Procédure stockée
    Par libremax dans le forum Développement
    Réponses: 6
    Dernier message: 09/12/2008, 15h20
  2. [DEBUTANT]Procédure stocké non bloquante
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/06/2007, 12h45
  3. [DEBUTANT]Procédure stockée Traitement sur une boucle de requete
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/06/2007, 16h24
  4. [DEBUTANT]Procédure stockée avec plusieurs requetes
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/06/2007, 17h49
  5. [DEBUTANT] procédure stockées dans select
    Par wrapx dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/06/2006, 19h08

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