0

stored procedureなぜこれが機能しないのか、何が間違っているのか誰か教えてください。構文エラーが発生し続けます。

puserid and plimitプロシージャで渡されるパラメータです。

DECLARE uid BIGINT;
DECLARE rangee TINYINT;
SET @uid    = puserid;
SET @rangee = plimit * 15;


PREPARE STMT FROM 
'IF((SELECT count(type) from notificationrecievers nr where 
nr.status=0 and nr.recieverid=?) = 0) THEN
select nr.type,n.senderid,n.postid,u.name,nr.status
 from 
 user u,notifications n,notificationrecievers nr where 
 nr.recieverid=? and u.userid=n.senderid   and
 nr.notificationid=n.notid order by n.notid desc
limit 15 OFFSET ?;
ELSE
select nr.type,n.senderid,n.postid,u.name,nr.status
 from 
 user u,notifications n,notificationrecievers nr where 
 nr.recieverid=? and u.userid=n.senderid   and nr.status=0 and
 nr.notificationid=n.notid order by n.notid desc;
END IF;';

EXECUTE STMT USING @uid,@uid,@rangee,@uid;

これが私が得るエラーです。

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF((SELECT count(type) from notificationrecievers nr where nr.status=0 and nr.r' at line 1
4

1 に答える 1

0

準備済みステートメントでは DML のみを使用できます。このようなことができます

IF condition THEN
  set @q = 'your query text'
ELSE
  set @q = 'another query'
END IF;

PREPARE stmt FROM @q
EXECUTE stmt using ...
DEALLOCATE PREPARE stmt

条件を評価する前に、いくつかのクエリを実行できます。それが役に立てば幸い

于 2013-02-04T08:31:38.047 に答える