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 :

Problème de paramètre dans une procédure stockée


Sujet :

SQL Firebird

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Problème de paramètre dans une procédure stockée
    tout le monde,
    Je bosse sous interbase 7.0 et je bloque sur une procédure stockée :
    je lui passe en paramètre un VARCHAR(200) qui correspond à un bout de requête (Exemple : "NOREP BETWEEN 50 AND 99");
    Je souhaiterai intégrer ce bout de code dans plusieurs requêtes :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    CREATE PROCEDURE RecupDonnees(FINREQ VARCHAR(200), DATED DATE, DATEF DATE)
    RETURNS(CAG,MARGENG,PDSG,NBFACG,MOYARTG,NBCLIG,
    CAF1,CAF2,CAF3,CAF5,CAF6,CAF8,CAF9,
    MARGEF1,MARGEF2,MARGEF3,MARGEF5,MARGEF6,MARGEF8,MARGEF9,
    NBCLILCR,CALCR,CATELEVT,CANOUV,PDSNOUV,NBCLINOUV,
    CAMAIL,PDSMAIL,NBCLIMAIL,CAPS,PDSPS,NBCLIPS)
    AS
    DECLARE VARIABLE CAF NUMERIC(15,4);
    DECLARE VARIABLE MARGEF NUMERIC(15,4);
    DECLARE VARIABLE FAM INTEGER;
    BEGIN
     
    FOR
    SELECT FAMILLE,Sum(CA),Sum(MARGE_N)
    FROM CONDENS_LIGNES
    WHERE DATELIV BETWEEN :DATED AND :DATEF
    AND STAT_LI=1 AND STAT_CO=1
    AND :FINREQ
    GROUP BY FAMILLE
    INTO :FAM, :CAF, :MARGEF
    DO
    BEGIN
    IF(:FAM=1)
    THEN
    	BEGIN
    		CAF1=:CAF;
    		MARGEF1=:MARGEF;
    	END
    IF(:FAM=2)
    THEN
    	BEGIN
    		CAF2=:CAF;
    		MARGEF2=:MARGEF;
    	END
    IF(:FAM=3)
    THEN
    	BEGIN
    		CAF3=:CAF;
    		MARGEF3=:MARGEF;
    	END
    IF(:FAM=5)
    THEN
    	BEGIN
    		CAF5=:CAF;
    		MARGEF5=:MARGEF;
    	END
    IF(:FAM=6)
    THEN
    	BEGIN
    		CAF6=:CAF;
    		MARGEF6=:MARGEF;
    	END
    IF(:FAM=8)
    THEN
    	BEGIN
    		CAF8=:CAF;
    		MARGEF8=:MARGEF;
    	END
    IF(:FAM=9)
    THEN
    	BEGIN
    		CAF9=:CAF;
    		MARGEF9=:MARGEF;
    	END
    END
     
     
    SELECT Sum(CA),Sum(MARGE_N),Sum(PDS),Count(DISTINCT NOFAC)
    FROM CONDENS_COM
    WHERE DATELIV BETWEEN :DATED AND :DATEF
    AND STAT=1
    AND :FINREQ
    INTO :CAG,:MARGENG,:PDSG,:NBFACG;
     
    SELECT Count(DISTINCT NOCLI)
    FROM CONDENS_COM
    WHERE DATELIV BETWEEN :DATED AND :DATEF
    AND STAT=1
    AND NOCLI NOT BETWEEN 300000 AND 399999
    AND :FINREQ
    INTO NBCLIG;
     
    CREATE VIEW ART (NBART,NOCLI)
    AS
    SELECT Count(DISTINCT NOARTI),NOCLI
    FROM CONDENS_LIGNES
    WHERE DATELIV BETWEEN :DATED AND :DATEF
    AND STAT_LI=1 AND STAT_CO=1
    AND :FINREQ
    GROUP BY NOCLI;
     
    SELECT AVG(NBART)
    FROM ART
    INTO :MOYARTG;
     
    DROP VIEW ART;
     
    SELECT SUM(CA),COUNT(DISTINCT NOCLI)
    FROM CONDENS_COM
    WHERE DATELIV BETWEEN :DATED AND :DATEF
    AND STAT=1
    AND TYPE_PAIEMENT LIKE 'TD%'
    AND :FINREQ
    INTO :CALCR, :NBCLILCR;
     
    SELECT SUM(CA)
    FROM CONDENS_COM
    WHERE DATELIV BETWEEN :DATED AND :DATEF
    AND STAT=1
    AND (NOOPE IN (10,11,14,32,29,50,62,63,64,90,91,92)
    AND :FINREQ
    INTO :CATELEVT;
     
    END
    Evidemment, le :FINREQ dans mes requêtes me renvoie une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Invalid token.
    Dynamic SQL Error.
    SQL error code = -104.
    Token unknown - line 22, char 11.
    GROUP.
    J'ai essayé en déclarant une variable requete VARCHAR, puis concaténer tout ça dans requete et faire un for requete into :noms_variable, mais ça ne fonctionne pas.
    Je sais que les curseurs sous interbase ne sont pas recommandés.
    Alors, quelqu'un aurait il une solution? Et surtout, est-il possible de passer des bouts de requête en paramètre et de reconstituer la requête dans la procédure stockée?
    Un grand merci à tous ceux qui pourront m'aider

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Après de nombreuses recherches, j'ai compris que je ne pouvais pas faire de SQL dynamique avec interbase.
    Chose qui est possible avec Firebird.
    Malheureusement, je n'ai pas la possibilité de migrer sous firbird, donc voivi la solution pour laquel j'ai opté :
    créer dynamiquement ma procédure stockée.
    Je travaille avec java, et je lance un execute("CREATE PROCEDURE .....
    SELECT * FROM TABLES WHERE " + mon_bout_de_code + " .......");
    Puis une fois ceci exécuter, je fais un select * from ma_procedure et je la supprime ensuite.
    Ce n'est pas long et plus simple que de créer des procédures pour chaque cas.
    Voilà, en espérant que ça puisse aider d'autres personnes !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/10/2008, 17h29
  2. type de paramètre dans une procédure stockée
    Par shirya dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/03/2007, 20h08
  3. Réponses: 1
    Dernier message: 20/07/2006, 18h03
  4. Réponses: 4
    Dernier message: 16/12/2005, 17h25
  5. Problème Alter view dans une procédure stockée
    Par adjava dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2005, 18h45

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