· 8 years ago · May 27, 2018, 12:40 PM
1DROP PROCEDURE IF EXISTS split_string;//
2
3
4CREATE PROCEDURE split_string (
5 IN input TEXT,
6 IN delimiter VARCHAR(10)
7)
8 SQL SECURITY INVOKER
9 BEGIN
10 DECLARE cur_position INT DEFAULT 1 ;
11 DECLARE remainder TEXT;
12 DECLARE cur_string VARCHAR(1000);
13 DECLARE delimiter_length TINYINT UNSIGNED;
14
15 DROP TEMPORARY TABLE IF EXISTS SplitValues;
16
17 CREATE TEMPORARY TABLE SplitValues (
18 value VARCHAR(1000) NOT NULL PRIMARY KEY
19 ) ENGINE=MEMORY;
20
21 SET remainder = input;
22 SET delimiter_length = CHAR_LENGTH(delimiter);
23
24 WHILE CHAR_LENGTH(remainder) > 0 AND cur_position > 0 DO
25 SET cur_position = INSTR(remainder, delimiter);
26
27 IF cur_position = 0 THEN
28 SET cur_string = remainder;
29 ELSE
30 SET cur_string = LEFT(remainder, cur_position - 1);
31 END IF;
32
33 IF TRIM(cur_string) != '' THEN
34 INSERT INTO SplitValues VALUES (cur_string);
35 END IF;
36
37 SET remainder = SUBSTRING(remainder, cur_position +
38delimiter_length);
39 END WHILE;
40 END;
41//
42
43
44drop procedure IF EXISTS ordoneaza_interese;//
45
46CREATE PROCEDURE ordoneaza_interese(IN cid INT)
47BEGIN
48
49 DECLARE done INT DEFAULT 0;
50 DECLARE rec_cursor TEXT;
51 DECLARE curs CURSOR FOR select `interese` from users where `comunitate_id`=cid;
52 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
53
54 DROP TEMPORARY TABLE IF EXISTS test1;
55
56 OPEN curs;
57
58 REPEAT
59 FETCH curs INTO rec_cursor;
60 IF NOT done THEN
61 split_string (rec_cursor, ',');
62 END IF;
63 UNTIL done END REPEAT;
64
65 CLOSE curs;
66
67 #select * from test1;
68
69END;//
70
71call ordoneaza_interese(11);
72
73#select interese from users where comunitate_id=11