2015-03-09 4 views
1

Я пишу хранимую процедуру в mysql, которая просто возвращает строку с предоставленным идентификатором или возвращает всю таблицу, если не указан ID.mysql where clause не работает

CREATE DEFINER=`root`@`localhost` PROCEDURE `SLICE_GET`(`slice_id` int) 
BEGIN 
SELECT * 
FROM `thesis_db`.`SLICE_INFO` 
WHERE (SLICE_ID = `slice_id` OR `slice_id` IS NULL); 
END 

Я использовал ту же самую идею в MS-SQL в течение многих лет пока это не похоже на работу для MySQL, так как независимо от того, который передается идентификатор, процедура возвращает всю таблицу. Что мне здесь не хватает?

+1

Вы говорите 'WHERE SLICE_ID = SLICE_ID', который всегда будет возвращать true для каждой отдельной строки. – Siyual

+1

Мне кажется, что вы используете столбец в своем фильтре вместо параметра: 'WHERE slice_id = slice_id или slice_id IS NULL' всегда будет истинным для каждой строки – Lamak

+0

делает' SLICE_ID' и 'slice_id' из разных таблиц? Или 'slice_id' является значением? – Avidan

ответ

0

Это способ, чтобы писать процедуры в MySQL

DELIMITER $$  
CREATE PROCEDURE `name of procedure` (x CHAR(1), D1 DATE, D2 DATE) 
BEGIN 
SELECT name of columns you want to display 
FROM table name 
WHERE SLICE_ID= x 
OR SLICE_ID IS NULL; 
END 
$$ 

Примечание: Кроме MySQL не чувствителен к регистру означает, что все заглавные буквы или все небольшие не будет влиять на это.

delimiter используется для: Если вы используете клиентскую программу mysql для определения сохраненной программы, содержащей символы с запятой, возникает проблема.

По умолчанию mysql сам распознает точку с запятой как разделитель инструкций, поэтому вы должны переопределить разделитель временно, чтобы заставить mysql передать все хранимое определение программы на сервер.