Синтаксическая ошибка Sql в процедуре

#mysql #sql #procedure

#mysql #sql #процедура

Вопрос:

Я пишу одну процедуру, чтобы получить данные из базы данных.

Вот моя процедура.

 CREATE DEFINER=`root`@`localhost` PROCEDURE `getCdrListnew`(from_date DATETIME, to_date DATETIME, 
 p_category VARCHAR(255), p_callType VARCHAR(255), p_businessId VARCHAR(255), p_dnc VARCHAR(255),
 p_cli VARCHAR(255), p_dni VARCHAR(255), p_callNumber VARCHAR(255), p_dialType VARCHAR(255), p_contractType VARCHAR(255) )
BEGIN
       DECLARE a INT ;
       DECLARE setFilter INT DEFAULT FALSE;
    DECLARE CONTINUE HANDLER FOR NOT FOUND 
       SET a = 0;
     BEGIN
END;


    SET @sqlCalls = 'SELECT agentcdr.isdnCauseCode,COUNT(*) as count  FROM cdr';  
 -- SET @sqlCalls= CONCAT(@sqlCalls,' LEFT JOIN agentcdr ON cdr.idCDR=agentcdr.cdr_idCDR ');


        IF( (from_date IS NOT NULL AND from_date != '')amp;amp; (to_date IS NOT NULL  AND to_date != '') ) THEN
   SET @sqlCalls= CONCAT(@sqlCalls,' WHERE cdr.createdDt >='',from_date,'' AND cdr.createdDT<=', ''',to_date,''');
   SET setFilter = TRUE;
  END IF; 

  SET @sqlCalls= CONCAT(@sqlCalls,' LEFT JOIN agentcdr ON cdr.idCDR=agentcdr.cdr_idCDR GROUP BY agentcdr.isdnCauseCode ');
  PREPARE prepsqlstr1 FROM @sqlCalls;
  EXECUTE prepsqlstr1;
END
  

Когда я выполняю приведенный выше код, я получаю сообщение об ошибке, как показано ниже.

 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 'LEFT JOIN agentcdr ON cdr.idCDR=agentcdr.cdr_idCDR GROUP BY agentcdr.isdnCauseCo' at line 1
  

Я знаю, что это проблема синтаксиса, но не могу понять, что я здесь делаю не так.

Пожалуйста, помогите мне.

Также дайте мне знать, есть ли какой-либо способ распечатать запрос, который выполняется в процедуре, для целей отладки.

Комментарии:

1. Объединения должны предшествовать WHERE предложению

2. удалите ошибочную строку и раскомментируйте ту же строку выше.

3. @Ravinder Я удалил прокомментированный код и попытался, но все равно получаю ту же ошибку

4. Какой вывод select @sqlCalls; ? поместите этот оператор перед prepare и запустите.

Ответ №1:

Похоже, у вас неправильный порядок в сгенерированном операторе:

Вы получаете select ... where ... left join ... . Это неправильный синтаксис.

Комментарии:

1. Имею в виду, что сначала я должен выполнить левое соединение, а затем where

2. @user1534577 Да, это то, что я имею в виду.

3. Пожалуйста, смотрите строку с комментариями после инструкции select в приведенной выше процедуре, я пробовал таким образом, получая ту же ошибку

4. @user1534577 у вас есть a GROUP BY в конце join . Это должно быть после WHERE инструкции.