cs_polo86
Messages postés19Date d'inscriptionsamedi 14 février 2009StatutMembreDernière intervention 5 mai 2009
-
3 mars 2009 à 16:27
cs_polo86
Messages postés19Date d'inscriptionsamedi 14 février 2009StatutMembreDernière intervention 5 mai 2009
-
4 mars 2009 à 21:25
bonjour,
Je réalise une application web asp en C# et avec mysql.
J'aimerais créer une procédure stockée qui reçoit en paramètre une chaine.
Cette chaine vient d'un textBox de recherche et est construite de la manière suivante:
par exemple la recherche est: pol dutro
donc la phrase passée en paramètre sera pol/dutro
Une fois dans la procedure stockée, j'aimerai reséparer les 2 mots dans
ce cas (pol dutro) et boucler tant qu'il y a des mots pour faire un insert des
champs correspondant dans une table temporaire, un code dans ce genre:
Code :
WHILE expression
INSERTINTO @tableTemp
SELECT * FROMTABLEWHERE nom LIKE'%param%'
end while;
voilà j'aimerai savoir ce qu'il faut utiliser pour couper la
chaine séparée par le caractère '/' ainsi que l'expression pour sortir
de la boucle.
cs_polo86
Messages postés19Date d'inscriptionsamedi 14 février 2009StatutMembreDernière intervention 5 mai 2009 4 mars 2009 à 15:48
J'ai créé une table temporary pcq ce n'est pas permis de faire DECLARE TABLE et changé tous les mots equi auraient pu être réservé mais j'ai toujours la même erreur:
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'Declare
rech varchar(50); declare pos int; declare mot varchar(30)' at
line 11
voici le code changé, pour information j'utilise EMS SQL Manager 2007 Lite for MySQL
CREATE DEFINER = CURRENT_USER PROCEDURE `new_proc`(
IN SearchSociete VARCHAR(50),
OUT HowManyResults INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
CREATETEMPORARYTABLE societeTemp (idSociete INT, nomSociete VARCHAR(50), dateCreSociete DATETIME, tvaSociete VARCHAR(30));
DECLARE rech VARCHAR(50);
DECLARE pos INT;
DECLARE mot VARCHAR(30);
/* searchSociete est une chaine reçu qui peut avoir plusieurs mots séparés par '/'
exemple: pol/dury/ */
SET rech = 'SearchSociete';
/*donne la position d'ou se trouve le caractère spécial*/
SET pos = LOCATE('/', rech);
/*boucle tant qu'il y a ce caractère dans la chaine*/
WHILE LOCATE('/', rech) DO
/*donne la position ou on se trouve avant le caractère spécial*/
SET pos = pos - 1;
/*affecte word au mot a gauche séparé par '/' */
SET mot = LEFT(rech, pos);
/*remplit la table temporaire */
INSERTINTO societeTemp SELECT * FROM'sct'
WHERE nom LIKE'%mot%'OR sct_num_tva LIKE'%mot%';
/*donne la position ou on se trouve après le caractère spécial*/
SET pos = pos + 2;
/*assigne search avec la valeur de la chaine qui se trouve à droite du caractère '/' */
SET rech = SUBSTRING(rech, pos);
end while;
SELECT HowManyResults = COUNT(*)FROM societeTemp;
/* renvoie le réusltat*/
SELECT * FROM societeTemp;
cs_polo86
Messages postés19Date d'inscriptionsamedi 14 février 2009StatutMembreDernière intervention 5 mai 2009 4 mars 2009 à 21:25
j'ai trouvé l'erreur, c'était en fait que le declare des variables doit
être juste après le BEGIN et avec la CREATE TEMPORARY TABLE. Le
problème n'est malheureusement pas fini car j'ai maintenant une autre
erreur.
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'sct'
where sct_nom like '%$mot%' or sct_num_tva like '%$mot%';
*/d at ligne 31 (end while
J'ai testé le where avec et sans $ mais rien n'y change.