2014-10-03 170 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 $$