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 :

[DOC] et [procédure stockée]


Sujet :

SQL Firebird

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut [DOC] et [procédure stockée]
    Bonjour,

    Vouala, j'ai deux petits problèmes :

    1) Je dois être mal réveillé, ou c'est le WE qui était trop long, car je n'arrive pas à mettre la main sur la doc SQL interbase (pas la doc d'install, la doc EssQUelle !).

    2) Je m'essaie aux procédures stockées, et mon premier code est rejeté dans IBconsole... ( 'to! ) Voici ce que j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE nb_acces_par_jour ( jour varchar(10) )
    RETURNS ( nb_acces integer )
    AS
    BEGIN
        select count(*) from TEST1 where COL_DATE = :jour ;
    END
    Merci d'avance

  2. #2
    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
    Pour ce qui est des docs :ftp://ftpc.borland.com/pub/interbase...ib_b60_doc.zip
    Un zip de 10.4 Mo contenant les principaux bouquins au format PDF indispensable pour être autonome...

    Sinon ta procédure a un problème, tu ne renseignes jamais le paramètre de retour ....

    CREATE PROCEDURE nb_acces_par_jour ( JOUR varchar(10) )
    RETURNS ( NB_ACCES integer )
    AS
    BEGIN
    select count(*) from TEST1 where COL_DATE = :JOUR INTO :NB_ACCES;
    suspend; /*Si tu veux pouvoir récupérer le résultat comme pour un odre select */
    END

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci pour la doc, je l'avais déjà jéjà téléchargé en fait, mais je l'avais oublié dans un coin de mon disque dur ! ! !

    Pour la procédure stockée, ça marche pas, IBconsole me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL error code = -104
    Unexpected end of command
    Vu que je suis ultra-novice, je sais pas à quoi ça fait référence...

  4. #4
    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
    Oui tu n'as pas redéfini le Code qui précise à Interbase que tu as fini...
    Par défaut ce code est le ;
    donc dès qu'il le rencontre il essaye d'exécuter ce qui précéde..
    ca marche tres bien pour les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select a,b,c from AA;
    Insert .... ;
    Select .... ;
    Il va exécuter chaque ordre les un apres les autres sans problèmes.
    Mais si tu lui envois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROCEDURE nb_acces_par_jour ( JOUR varchar(10) ) 
    RETURNS ( NB_ACCES integer ) 
    AS 
    BEGIN 
    select count(*) from TEST1 where COL_DATE = :JOUR INTO :NB_ACCES; 
    suspend; /*Si tu veux pouvoir récupérer le résultat comme pour un odre select */ 
    END
    Il va essayer d'exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE PROCEDURE nb_acces_par_jour ( JOUR varchar(10) ) 
    RETURNS ( NB_ACCES integer ) 
    AS 
    BEGIN 
    select count(*) from TEST1 where COL_DATE = :JOUR INTO :NB_ACCES;
    D'où l'erreur...
    Donc il faur redéfinir le ; provisoirement pour lui dire de ne pas exécuter dès le premier ; rencontré mais autre chose....

    va remplacer le caractère de fin de commande par !!
    donc essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Set Term !! ;
    CREATE PROCEDURE nb_acces_par_jour ( JOUR varchar(10) ) 
    RETURNS ( NB_ACCES integer ) 
    AS 
    BEGIN 
    select count(*) from TEST1 where COL_DATE = :JOUR INTO :NB_ACCES; 
    suspend; /*Si tu veux pouvoir récupérer le résultat comme pour un odre select */ 
    END!!
    Set term ; !!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    WouaaA ! ! Génial, ça marche ! ! !



  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Heu, j'ai fais une autre version de ma procédure stockée, en essayant d'utiliser un compteur, mais ça marche pas non plus :
    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
    Set Term !! ; 
    CREATE PROCEDURE nb_acces_par_jour ( jour varchar(10) )
    RETURNS ( nb_acces integer )
    AS
        DECLARE VARIABLE nb_acces integer;
    BEGIN
        FOR
            select * from TEST1 where COL_DATE = :jour;
        DO
        BEGIN
            nb_acces = nb_acces + 1;
        END
        suspend;
    END
    Set term ; !!

  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
    Oui ton select count(*) est bien mieux...
    Mais pour te corriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set Term !! ; 
    CREATE PROCEDURE nb_acces_par_jour ( JOUR varchar(10) ) 
    RETURNS ( NB_ACCES integer ) 
    AS 
    DECLARE VARIABLE I integer; 
    BEGIN 
      NB_ACCES = 0;
      FOR select 1 from Test1 where COL_Date = :JOUR INTO :i
      DO
        NB_ACCES = NB_ACCES +1;
      suspend;
    END!! 
    Set term ; !!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Yes, ça passe (encore ! )
    Par contre, lorsque j'appelle la procédure avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute procedure nb_acces_par_jour("16Mar2003");
    elle renvoie simplement null, alors que si j'exécute la requète directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from TEST1 where COL_DATE ="16Mar2003";
    ça renvoie un nombre d'enregistrements...
    C'est le même problème pour les deux procédures.

  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
    Si tu veux l'appeler par execute procedure (regarde mon commentaire sur la ligne suspend)..
    Enlève la ligne suspend; et normalement tu pourras récupérer le résultat avec execute procedure. (Enfin je pense....)

    Sinon si tu laisses la ligne suspend essaye d'exécuter l'odre SQL suivant (pas par execute procedure...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select NB_ACCES from nb_acces_par_jour('16Mar2003');
    Ca devrait fonctionner...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci encore , tout fonctionne avec un select !

    Je vais pouvoir commencer à pousser un peu le chmilblic...
    Par contre, le fait d'enlever suspend ne me permet pas de récupérer le résultat, mais ce n'est pas grave, puisque ça marche avec un select !

  11. #11
    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 nawac
    Par contre, le fait d'enlever suspend ne me permet pas de récupérer le résultat, mais ce n'est pas grave, puisque ça marche avec un select !
    Ah je ne peux pas t'aider sur ce coup la car je crois me souvenir que tu utilises un langage (Java il me semble) que je n'ai pas pratiqué avec Interbase...

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Certes, mais il se trouve que j'utilise pour cette partie de mon projet du PHP ! ! !
    D'ailleurs, j'ai un problème : il faudrait que je puisse envoyer des procédures (CREATE PROCEDURE...) à partir du ouèb (d'un formulaire donc) mais ça ne marche pas... J'ai peur que cela ne soit pas possible :
    une procédure stockée s'appelle à distance, mais peut-elle être aussi créée à distance ??
    C'est un point crucial de mon projet...

    PS : il serait peut-être mieu que je post ce message dans le forum PHP, mais j'ai bien peur qu'on me renvoie ici !

  13. #13
    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 je ne sais pas...
    Ca va dépendre essentiellement des API interbase qui sont à ta disposition pour PHP... et là j'avoue... je ne connais pas...
    Essaye le forum PHP.
    Tu es certains que tu ais besoin de créer des procédures dynamiquement ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Pour la création de procédure dynamique, oui.
    Enfin bref, j'essaie du coté des PHPistes...

    ...et encore MERCI Barbibulle pour tes conseils et ton savoir, tu es Grand



  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
    arrete...

  16. #16
    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
    Peux tu m'expliquer ton besoin de créer des procédures stockées dynamiquement ? (Si ce n'est pas un secret...)

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    En fait, je suis toujours sur le même projet depuis deux mois (chui en stage...).
    Le but est de créer un outil qui puisse analyser n'importe quel type de fichier log.

    J'ai donc construit un convertisseur de fichier log en base de donnée (à l'aide d'un système d'expressions régulières et tout...) dans le but de bénéficier de la puissance du langage SQL pour l'analyse.

    La deuxième étape est de créer une interface consultable de n'importe ou (donc web) qui permettrait d'analyser la base de données. Dans cette optique, il m'a été imposé deux manières de procéder :
    1) possibilité de faire une demande ponctuelle (donc d'écrire une requète simple, en gérant les droits d'accès et les types de requètes - pas de drop par exemple)
    2) 'programmation' d'analyses, qui pourront être exploitable facilement par la suite (donc PROCEDURES STOCKéES).

    Vu que les fichiers log convertis changent régulièrement, et que l'utilisateur n'est pas sur la machine serveur, la création d'une procédure à partir de l'interface graphique s'impose comme un bon choix...
    (enfin j'espère, parce que dans un mois mon exam dépendra de ce projet !)

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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