Синтаксическая ошибка подготовленного оператора MySQL в переменной

0

Я создаю хранимую процедуру, которая будет выполнять подготовленную SELECT на основе входных параметров. Нединамическая версия этой процедуры работает fine-, то есть, похоже, что работает основной запрос SELECT. Когда я вызываю динамическую процедуру, я получаю синтаксическую ошибку в WHERE. Я не понимаю, что случилось, и я просил еще один взгляд.

DROP PROCEDURE IF EXISTS find_batter;
DELIMITER //
CREATE PROCEDURE find_batter
    ( #input age, position, and parent org 
    IN age_param SMALLINT (6),
    IN position_param VARCHAR (15),
    IN org_param VARCHAR (10)
    )
BEGIN

   DECLARE select_clause VARCHAR (2000);
   DECLARE where_clause VARCHAR (500);
   DECLARE order_clause VARCHAR (200);


   SET select_clause = "SELECT concat(p.first_name, ' ', p.last_name) as player
     ...
       ";

     SET where_clause= "WHERE p.retired=0 AND b.year=2015 AND b.PA>50";

   IF age_param IS NOT NULL THEN
     SET where_clause = concat(where_clause, ‘ AND ‘, age_param, ‘>=p.age);
   END IF;
   ...

Я получаю синтаксическую ошибку, сообщающую мне проверить около p.retired в WHERE. Остальные выражения IF интерпретируются как закодированные - динамические, где в ошибке появляются сообщения, поэтому я думаю, что проблема заключается в первом SET. Я просто этого не вижу.

РЕДАКТИРОВАТЬ: Вопрос не был до "ГДЕ".

  • 1
    После сборки оператора sql просто распечатайте его, не выполняйте. Вы, вероятно, сразу увидите, что с ним не так (я думаю, что до места нет места)
  • 0
    Ага! Нет места до где. Спасибо!
Теги:

1 ответ

0

То, что я вижу в коде, - это фанковые умные кавычки Windowz в коде.

SET where_clause = concat(where_clause, ‘ AND ‘, age_param, ‘>=p.age);
--                                      ^     ^             ^       ^ 

В качестве первого шага я предлагаю заменить кавычки фанки на простые персонажи с одинарными кавычками vanii ascii 39 (0x27).

SET where_clause = concat(where_clause, ' AND ', age_param, '>=p.age');
--                                      ^     ^             ^       ^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню