0

私は次のようなクエリを書きました:

select * from c_course where c_course.cdesc LIKE CONCAT('%',"science",'%')
OR  c_course.cname LIKE CONCAT('%',"science",'%');
cid     cname      cdesc      sdate         edate
'301', 'physics', 'science', '2013-01-03', '2013-01-06'
'303', 'chemistry', 'science', '2013-01-09', '2013-01-09'
'501', 'science', 'natural science', '2013-01-31', '2013-01-09'

その正常に動作します。私はこのようなストアドプロシージャを使用して書いたのと同じです:

use lportal;
delimiter //
create procedure pro_search143(IN sname varchar(20))
begin

SET @c = CONCAT('"',sname,'"');

select * from c_course where 

c_course.cdesc LIKE CONCAT('%',c,'%')
OR 
c_course.cname LIKE CONCAT('%',c,'%');

end
//

実行中ですが、プロシージャの呼び出し中に次のようなエラーが表示されます。

CALL pro_search143("科学"); c where 句の列が不明です。

誰でも私のコードを変更して解決策を提供できますか?

4

2 に答える 2

0

変数を定義します@cが、使用しますc。を逃しました@

しかし、なぜ

select * from c_course 
where cdesc LIKE CONCAT('%',sname,'%')
OR cname LIKE CONCAT('%',sname,'%');

あなたの例を見ると、あなたもできる

select * from c_course 
where sname in (cdesc, cname)

これは、ワイルドカード検索を行うよりもはるかにパフォーマンスが優れています。

于 2013-08-31T07:39:13.763 に答える
0

これかもしれません:

 use lportal;
 delimiter //
 create procedure pro_search143(IN sname varchar(20))
 begin

 SET @query = concat('select * 
                      from c_course 
                      where c_course.cdesc LIKE CONCAT(''%'',''',sname,''',''%'') 
                         OR c_course.cname LIKE CONCAT(''%'',''',sname,''',''%'');
                     ');

 PREPARE stmt FROM @query;
 EXECUTE stmt;

 end //

そして:call pro_search143("science")

于 2013-08-31T07:31:03.770 に答える