Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/09/2007, 10h41   #1
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
Par défaut execute statement et paramètre de type date

Bonjour
je veux exécuter une requête sql avec la commande execute statement à l'intérieur d'une procédure stockée, dans cette requête, et plus précisément dans la clause Where j'ai une comparaison (>=) d'un champ de type date avec la valeur d'un paramètre en entrée de la procédure. Comment faire pour remplacer cette valeur .


A fin de mieux comprendre la problématique voici un exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE procedure test(idate)
AS
declare variable vsql varchar(100);
begin
 
vsql ="select * from facture where (Date_Fac >=" || :idate  || " ) " ;
/* … 
autres traitement sur vsql 
….
*/
 
FOR execute statement vsql do suspend ;
end;
Ce que j'ai fait ne marche pas !

Merci pour votre aide.
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 15h09   #2
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
C'est normal que ça marche pas !
voici comment s'y prendre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE PROCEDURE NEW_PROCEDURE (
    IDATE DATE)
RETURNS (
    COLONNE1 VARCHAR(30), 
    COLONNE2 DATE)
AS
DECLARE VARIABLE VSQL VARCHAR(100);
begin
 vsql=CAST (:IDATE AS CHAR(10));
 vsql ='select colonneCHAR,colonneDATE from FACTURE where (Date_Fact >= ''' || VSQL  || ''')' ;
 FOR execute statement vsql INTO :COLONNE1,:COLONNE2
  do suspend ;
end
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 15h21   #3
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
j'ai déja essayé ça ! ça ne marche pas le Cast donne un résultat un truc style "1-JAN-2007' est ça passe pas dans la requete !
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 18h25   #4
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Sur Firebird 2, ça roule impec. c'est vous dire si j'ai essayé !
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 10h14   #5
Membre habitué
 
Homme Ludovic Lemaitre
Ingénieur développement logiciels
Inscription : mai 2006
Messages : 64
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Lemaitre
Âge : 36
Localisation : France, Mayenne (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 64
Points : 102
Points : 102
Une discussion relativement récente sur les formats date :
http://www.developpez.net/forums/new...eply&p=2447106

Dans ton cas, j'aurais tendance à préconiser :
Code :
1
2
 
vsql ="select * from facture where (Date_Fac >=CAST(" || :idate  || " AS DATE) ) " ;
Pergos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 15h41   #6
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
J'ai essayé ça ne marche pas .
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 16h08   #7
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
C'est bon j'ai trouvé le porblème , l'idée de "TryExceptEnd" etait bonne sauf qu'il faudera faire un cast sur 11 caractères

Citation:
CREATE PROCEDURE TEST (
idate date)
returns (
pieceno varchar(12),
piecedate date,
psql varchar(100))
as
declare variable vsql varchar(100);
begin
vsql = 'Select piece_number, piece_date from piece where
(piece_date >= ''' || cast (:idate as char (11)) || ''') ';
PSQL =VSQL ;
for
execute statement vsql into pieceno, piecedate do suspend ;
end
En fait avec 10 caractère ça ne marche pas à tout les coups.
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 17h51   #8
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Au fait, quel serveur tu utilise ?
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h42.


 
 
 
 
Partenaires

Hébergement Web