| 12
 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
 
 |  
CREATE DEFINER = CURRENT_USER PROCEDURE `GetSociete`(
        IN SearchSociete VARCHAR(50),
        INOUT HowManyResults INTEGER
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
 
BEGIN
	DECLARE societeTemp TABLE (idSociete INT, nomSociete VARCHAR(50), dateCreSociete DATETIME, tvaSociete VARCHAR(30));
	DECLARE search VARCHAR(50);
    DECLARE position INT;
    DECLARE word VARCHAR(30);
 
    /* searchSociete est une chaine reçu qui peut avoir plusieurs mots séparés par '/' 
    exemple: pol/dury/   */
 
    set search = `SearchSociete`;
    /*donne la position d'ou se trouve le caractère spécial*/
    set position = LOCATE('/', search);
 
    /*boucle tant qu'il y a ce caractère dans la chaine*/
    WHILE LOCATE('/', search) DO
 
    /*donne la position ou on se trouve avant le caractère spécial*/ 
    set position = position - 1;
    /*affecte word au mot a gauche séparé par '/' */
    set word = LEFT(search, position);
 
    /*remplit la table temporaire */
    insert into societeTemp select * from `sct`
    where nom like '%word%' or sct_num_tva like '%word%';
 
    /*donne la position ou on se trouve après le caractère spécial*
    set position = position + 2;
    /*assigne search avec la valeur de la chaine qui se trouve à droite du caractère '/' */
    set search = SUBSTRING(search, position);
 
    end while;
 
    SELECT HowManyResults = COUNT(*)FROM societeTemp;
    /* renvoie le réusltat*/
    SELECT * FROM societeTemp;
 
END; | 
Partager