Proszę o pomoc w mojej procedurze. Chodzi o to ,że przy wywołaniu nie przechodzi wszystkich zadeklarowanych napisów. Robi je wybiórczo i nie jestem pewny czemu. %# jest delimiterem. Wywołanie składa się z (articlesId, phrase)
CODE
CALL PerformUpdate(37, '\'dynamiczny i\'%#\'tym messi\'%#\'to, że obaj są\'%#\'zawodnika, który\'%#\'dysponuje podobnymi do legendy piłki\'%#\'zostać moim następcą. argentyńczyk\'%#\'jest porównywany do\'%#\'najlepiej opisują słowa diego\'%#\'podobnymi do legendy piłki atutami.\'%#\'drybluje. przegląd sportowy\'%#\'wszystko to za zawodnika,\'%#\'jest argentyńczykiem. jego umiejętności piłkarskie\'%#\'zawodnika, który urodził się w\'%#\'opisują słowa diego maradony:\'%#\'do maradony. wszystko przez\'%#\'messi, jest argentyńczykiem. jego umiejętności\'%#\'atutami. jest szybki, dynamiczny\'%#\'następcą. argentyńczyk na każdym\'%#\'że obaj\'%#\'ma 169 cm,\'%#\'169\'%#\'słowa diego\'%#\'się lionel\'%#\'urodził się w\'%#\'cm, "boski diego" jest o\'%#\'centymetr\'%#\'moim następcą. argentyńczyk na\'%#\'porównywany\'%#\'moim następcą.\'%#\'jest argentyńczykiem.\'%#\'piłkarskie\'%#\'1987\'%#\'tym messi dysponuje podobnymi do\'%#\'każdym\'%#\'porównywany do maradony. wszystko przez\'%#\'i świetnie drybluje.\'%#\'do legendy piłki atutami. jest\'%#\'boski\'%#\'przez to, że obaj są\'%#\'1987 roku. nazywa\'%#\'każdym kroku jest porównywany\'%#\'niscy (messi ma 169 cm,\'%#\'jest o\'%#\'(messi ma 169 cm, "boski\'%#\'każdym kroku jest\'%#\'lionel messi, jest argentyńczykiem. jego\'%#\'o centymetr\'%#\'to, że\'%#\'niższy), poza\'%#\'maradony\'%#\'ma wszelkie dane, by zostać\'%#\'nazywa się lionel messi,\'%#\'poza tym messi dysponuje\'%#\'dynamiczny\'%#\'zawodnika, który urodził\'%#\'następcą. argentyńczyk na\'%#\'najlepiej\'%#\'atutami. jest\'%#\'do legendy piłki atutami.\'%#\'diego maradony:\'%#\'atutami\'%#\'niscy (messi ma 169\'%#\'wszystko przez to, że obaj\'%#\'cm, "boski diego" jest\'');
CODE
DELIMITER $$
DROP PROCEDURE IF EXISTS PerformUpdate $$
CREATE PROCEDURE `PerformUpdate`(articleId int(11), phrases longtext)
begin
declare phrasesCount, wordCount, counter int(11);
declare phrase, tableName varchar(255);
declare letter char(1);
declare help longtext;
set phrasesCount=(select (length(phrases)-length(replace(phrases, '%#' , '')))+1);
set counter=1;
while counter<=phrasesCount do
set phrase=trim(SPLIT_STR(phrases, '%#', counter));
set phrase=replace(phrase, '\'', '');
set phrase=replace(phrase, '\n', '');
set letter=lower(left(trim(phrase), 1));
set wordCount=(select (char_length(phrase)-char_length(replace(phrase, ' ', ''))+1));
set tableName=GET_SEARCH_TABLENAME(letter, wordCount);
set @sql=concat('select count(\'x\') into @check from ', tableName,
' where phrase=\'', phrase, '\' and (articlesId like \'%,', articleId, ',%\' or articlesId like \'', articleId, ',%\' or articlesId like \'%,',
articleId, '\')');
prepare stmt from @sql;
execute stmt;
if @check=0 then
set @sql=concat('select id into @check from ', tableName,
' where phrase=\'', phrase, '\' limit 1');
prepare stmt from @sql;
execute stmt;
if @check=0 then
set @sql=concat('insert into ', tableName,
'(articlesId, phrase) values(\'', articleId, ',\', \'', phrase, '\')');
prepare stmt from @sql;
execute stmt;
else
set @sql=concat('update ', tableName, ' set articlesId=concat(articlesId, \'', articleId,
',\') where id=', @check);
prepare stmt from @sql;
execute stmt;
end if;
end if;
set counter=counter+1;
end while;
deallocate prepare stmt;
end
CODE
DELIMITER $$
CREATE FUNCTION `GET_SEARCH_TABLENAME`(letter char(1), wordCount INT) RETURNS varchar(20) CHARSET utf8
BEGIN
DECLARE tableName VARCHAR(20);
set letter=replace(letter, 'ą', 'a');
set letter=replace(letter, 'ć', 'c');
set letter=replace(letter, 'ę', 'e');
set letter=replace(letter, 'ł', 'l');
set letter=replace(letter, 'ń', 'n');
set letter=replace(letter, 'ó', 'o');
set letter=replace(letter, 'ś', 's');
set letter=replace(letter, 'ż', 'z');
set letter=replace(letter, 'ź', 'z');
IF letter NOT REGEXP '[a-z]' THEN
SET tableName=CONCAT('Cache', wordCount, 'Word_other');
ELSE
SET tableName=CONCAT('Cache', wordCount, 'Word_', letter);
END IF;
RETURN tableName;
END
CODE
CREATE FUNCTION `SPLIT_STR`(
x longtext,
delim VARCHAR(12),
pos INT
) RETURNS varchar(800) CHARSET utf8
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '')[/sql]