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 27/02/2007, 18h44   #1
Invité de passage
 
Inscription : juin 2004
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 7
Points : 1
Points : 1
Par défaut pb execute statement et les accents

Bonjour
j'ai cré une base de données firebird qui utilise la charset ISO 8859_1 par défault afin de permettre de stocker les caractères francais.
tout marchait bien jusqu'a ce que j'ai ecrit une procedure stocké select qui renvoie les libelles des articles commencant par la variable en entree

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
SET TERM ^ ;
 
CREATE PROCEDURE GET_ARTICLES(
    VAR VARCHAR(40),
    RETURNS (
    CODE VARCHAR(10),
    NOM VARCHAR(40),
    )
AS
DECLARE VARIABLE SQL VARCHAR(1000);
begin
    sql = "select  art_code, art_nom  from t_article  where art_nom  starting with '" || :var || "'";
 
FOR
execute statement sql INTO :code, :nom, 
do
    suspend;
end
^
SET TERM ; ^
lorsque j'utilise cette procédure depuis mon application, les accents ne sont pas affichés correctement mais sont remplacés par des caractères indéfinies.

bizaremment j'ai crée une autre proc stockée qui n'utilise pas execute statement tous les articles avec accent sont affichés correctement.

le pb vient alors du execute statement.
merci
duran2004 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2007, 09h33   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
et quel est l'interêt d'utiliser un execute statement ?
cela ne sert à rien ici
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2007, 12h27   #3
Invité de passage
 
Inscription : juin 2004
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 7
Points : 1
Points : 1
bonjour,

oui mais la procédure stockée que je viens de la citer je l'ai crée que pour faire le test, j'avais d'autres ps plus compliqueés et dont l'utilisation de execute statement est obligatoire.


ces procédures stockées acceptent des parametres qui vont etre utilisé pour generer ma requete SQL.

voici un exemple de traitement

Citation:
sql = "select .... from ..... ";
if(:param1 = 1) then
sql = sql || ...;

if(:param2 = 5) then
sql = sql || ...;

for
execute statement sql into ....
do
suspend;
je ne trouve pas le moyen d'ecrire des procedures stockées qui acceptent des parametres sans l'utilisation de "execute statement"?
duran2004 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2007, 12h53   #4
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 758
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 758
Points : 6 779
Points : 6 779
Salut

Effectivement l'EXECUTE STATEMENT est superflu.
Pour reprendre la PS ton 1° post, elle peut s'écrire tout simplement comme ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
SET TERM ^ ;
 
CREATE PROCEDURE GET_ARTICLES(
  VAR VARCHAR(40),
RETURNS (
  CODE VARCHAR(10),
  NOM VARCHAR(40),
)
AS
begin
FOR
  SELECT art_code, art_nom
  FROM t_article
  WHERE art_nom starting WITH :VAR
  INTO :CODE, :NOM;
do
  suspend;
end
^
SET TERM ; ^
Ensuite si tu veux exécuter une requête adaptée à ton paramètre d'entrée, utilises des if pour contruire tes requêtes qui vont bien.
@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h30.


 
 
 
 
Partenaires

Hébergement Web