2014-10-03 6 views
0

Я очень новичок в MySQL (и в базах данных в целом) и мне было поручено создать хранимую процедуру, которая примет varchar в качестве параметра, который будет использоваться в качестве поиска по ключевым словам из 2 столбцов Таблица.Ошибки синтаксиса хранимой процедуры MySQL

Я не знаком с синтаксисом и поиск в Интернете не был столь же плодотворным, как хотелось бы. Это то, что я придумал:

DELIMITER // 

DROP PROCEDURE IF EXISTS proc_Search 
CREATE PROCEDURE proc_Search (IN word varchar(100)) 
BEGIN 
SELECT Section.Name 
FROM Section inner join DetailsMats ON Section.NumSection=DetailsMats.NumSection 
WHERE DetailsMats.TechName or DetailsMats.GenName LIKE %word%; 
END// 

Просто интересно, если я делаю что-то здесь не так мерзко, или если я нахожусь на правильном пути. Благодаря!

ответ

0

Я вижу две ошибки в коде:

  1. Отсутствующего разделителем // после DROP PROCEDURE ...
  2. LIKE выражения должна строкой. Я использую CONCAT('%', word, '%'), чтобы получить строку с word и '%'

исправленный код:

DELIMITER // 

DROP PROCEDURE IF EXISTS proc_Search // -- delimiter here 

CREATE PROCEDURE proc_Search (IN word varchar(100)) 
BEGIN 
SELECT Section.Name 
FROM Section inner join DetailsMats ON Section.NumSection=DetailsMats.NumSection 
WHERE DetailsMats.TechName or DetailsMats.GenName LIKE CONCAT('%', word, '%'); 
END 
// 
0

Кажется должно быть что-то вроде этого:

SELECT * 
FROM MyTable 
WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE '%keyword1%') 
     AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'); 
0

Попробуйте использовать CONCAT, чтобы избежать символ%. Счастливого кодирование :)

DROP PROCEDURE IF EXISTS proc_Search CREATE PROCEDURE proc_Search (IN word varchar(100)) BEGIN SET @sql = CONCAT('SELECT Section.Name FROM Section inner join DetailsMats ON Section.NumSection=DetailsMats.NumSection WHERE DetailsMats.TechName or DetailsMats.GenName LIKE "',job_no, '%"'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END $$

Смежные вопросы