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 :

procédure stockée qui ne fonctionne que dans l'environnement IBEasy+


Sujet :

SQL Firebird

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut procédure stockée qui ne fonctionne que dans l'environnement IBEasy+
    Bonjour

    Firebird 1.5 embeded
    Delphi 7
    IBEasy+ comme interface de gestion
    J'ai écris cette procédure stocké qui fonctionne parfaitement dans l'environnement de développement IBEasy + et me ramène bien les bons résultat, bien visible dans la table,
    Mais quand je la lance dans l'onglet des requête ou par tout autre moyen(mon applic Delphi), elle ne m'écrit que la première ligne(correcte), alors que selon les dates choisis je devrai avoir et c'est ce que me donne IBEasy + entre 15 et 25 lignes,

    Comment expliquez-vous ceci ?
    Comment y remédier ?

    Merci par avance de vos conseils
    Henri

    Ma ligne de commande(correcte !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE PROCEDURE REF_DATE ('05/27/09' ,'05/27/09')
    La procedure :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    COMMIT WORK;
    SET AUTODDL OFF;
    SET TERM ^ ;
     
     /* Stored procedures */
     
    CREATE PROCEDURE "REF_DATE"
     
    (
      "DATE_DEB" DATE,
      "DATE_FIN" DATE
    )
     
    RETURNS
    (
      "NOMBRE" INTEGER,
      "COMPOSITION" CHAR(70) CHARACTER SET ISO8859_1
    )
     
    AS
    BEGIN EXIT; END ^
     
    ALTER PROCEDURE "REF_DATE"
    (
      "DATE_DEB" DATE,
      "DATE_FIN" DATE
    )
     
    RETURNS
    (
      "NOMBRE" INTEGER,
      "COMPOSITION" CHAR(70) CHARACTER SET ISO8859_1
    )
    AS
    BEGIN
     
    DELETE FROM REF_CONSO ;
     
    FOR SELECT  SUM(PROD.DOCS) , ANNEXE.COMPO
    FROM  PROD LEFT OUTER JOIN MODELE LEFT OUTER JOIN  ANNEXE
    ON PROD.PREIMP = MODELE.PREIMP
    ON PROD.ANN = ANNEXE.ANN
    WHERE PROD.JOUR BETWEEN  : DATE_DEB AND : DATE_FIN
    GROUP BY ANNEXE.COMPO
    INTO : NOMBRE,
    :COMPOSITION
     
    DO
    BEGIN
    INSERT INTO REF_CONSO(COMPOSITION, SOMME) VALUES (:COMPOSITION,:NOMBRE);
    SUSPEND;
    END
    END
     ^
    SET TERM ; ^
    COMMIT WORK;
    SET AUTODDL ON;
    La table ou j'ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE "REF_CONSO"
    (
      "SOMME"         INTEGER,
      "COMPOSITION"           CHAR(70) CHARACTER SET ISO8859_1
    );

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 064
    Points : 41 025
    Points
    41 025
    Billets dans le blog
    62
    Par défaut
    je crois que la réponse est dans les dates . D'ailleurs comment sont elles déclarées ? DATE ou DATETIME ? Dans le second cas et bien c'est que IBEasy fait des transformations en interne (ce qui ne m'etonnerait pas )

    en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    EXECUTE PROCEDURE REF_DATE (CAST('05/27/09' AS DATE) ,CAST('05/27/09' AS DATE))
    EXECUTE PROCEDURE REF_DATE (CAST('27.05.2009' AS DATE) ,CAST('27.05.2009' AS DATE)) // tant qu''a faire la date en francais ;-) 
     
     
    EXECUTE PROCEDURE REF_DATE (CAST('05/27/09 00:00:00' AS DATE) ,CAST('05/27/09 23:59:59' AS DATE))
    que se passe t'il ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut C'est le même topo
    C'est le même topo
    Je ne récupère que la premier donnée
    Sous les deux environnements,

    Merci,
    Henri

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM PROCEDURE REF_DATE ('05/27/09' ,'05/27/09')
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut
    Voila la meilleure façon que j’ai trouvé avec une version francisé des dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from REF_DATE (CAST('29.05.2009' AS DATE) ,CAST('29.05.2009' AS DATE))
    Quel est la différence entre le « select * from REF_DATE » et » execute REF_DATE « dans ce cas ?

    En fait dans la version qui fonctionne me ramène, m’affiche le résultat, alors que j’ai juste besoin de mettre à jour ma table et pas l’afficher , car je vais devoir enchainer une autre procédure derrière celle-là,

    Tous comme j’aurai préférer passer par une view, mais d’après ce que j’ai lu , je dois détruire la vue et la recréer,
    Mais dans ce cas je ne peux par attacher une procédure à cette vue

    Merci de votre aide
    Henri

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 064
    Points : 41 025
    Points
    41 025
    Billets dans le blog
    62
    Par défaut
    heureusement , notre VIP est là
    je n'avais pas fait attention au fait que la procédure renvoyait un ensemble de données (et c'est le pourquoi du SELECT) je ne m'étais cantonné aux dates , méa culpa

    En fait dans la version qui fonctionne me ramène, m’affiche le résultat, alors que j’ai juste besoin de mettre à jour ma table et pas l’afficher , car je vais devoir enchainer une autre procédure derrière celle-là,

    Tout comme j’aurai préférer passer par une view, mais d’après ce que j’ai lu , je dois détruire la vue et la recréer,
    je comprend pas tout quel est l'objectif de la procédure ? si c'est créer une table contenant les informations sans l'afficher , il suffit de la modifier pour ôter la partie RETURNS et le SUSPEND . Dans ce cas , effectivement on utilisera EXECUTE PROCEDURE REF_DATE .....

    et un SELECT * FROM REF_CONSO pour obtenir les données
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut
    En fait, en gise de VIP, pas grand chose ne vous echappe, CHAMPION !

    Tous est OK, j'ai éliminé le suspend et remplacer les return par des variables locales, puisque je dois passer ces variables à une autre procédure,

    C'est pour la compositions de contrats, +/- 2500/jours
    j'ai sur une machine UNIX un fichier qui me dit avoir envoyé :

    123 contrats 001 avec 3 X ER13 + 142762
    18 contrats avec B38 142517 + 142200 + ER3AB + 140924 ....... ext

    les compositions d'annexes sont toujours les même, (3 X ER13 + 142762, B38 142517 + 142200 + ER3AB + 14092..... fois 80 compositions)
    Mon premier essaie a été de faire une procédure (mon post du 12/05) avec un <<un select like '%142762 %' >> par exemple sur 10 000 lignes, mais ç'a prenait une plombe.

    Ce coup-ci je fais un sum(), BETWEEN date et GROUP BY par composition, sur xxx milliers de lignes puisque les compositions sont les même, que je mets dans la table REF_CONSO , il me retourne mes 80 composition avec la sum des XXX fois ou cette compositions ont été appelé,
    Ensuite je fait mon <<select like '%142762 %' et sum() >> mais sur seulement 80 lignes,

    Le tous dans des procedures et c'est rapide,

    J'aurai aimer passer par une vue, mais ,je n'aurai pas pu la détruire et faire un create puisque j'avais l'intention de relier cette vue à une/des procédures

    Encore Merci de votre aide,
    Cordialement,
    Henri

Discussions similaires

  1. [9iR2] Procédures stockées qui résident dans la bibliothèque Oracle Forms
    Par achraf_ef dans le forum Administration
    Réponses: 1
    Dernier message: 25/01/2015, 09h25
  2. Réponses: 2
    Dernier message: 21/12/2012, 13h14
  3. [Res]Procédure stockée qui fait un insert basé sur un select
    Par wonderliza dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 18h25
  4. procédure stockée pour renvoyer un état dans une application
    Par erickoffi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 19h05
  5. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 20h25

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