DROP PROCEDURE `spGetUserLog1`//
CREATE DEFINER=`xxx`@`xxxxx` PROCEDURE `spGetUserLog1`(
IN sUsername VARCHAR(9), IN dtFrom DATETIME, IN dtTo DATETIME,
IN OFFSET SMALLINT(1), IN ROWCOUNT SMALLINT(1), IN iGMT VARCHAR(50))
BEGIN
DECLARE UId, SR, R, MR, D SMALLINT(1);
DECLARE G,iGMT VARCHAR(50);
SELECT UserId, SubReseller, Reseller, MainReseller, Distributor,GMT
INTO UId, SR, R, MR, D ,G
FROM Customers WHERE Username=sUsername LIMIT 1;
CASE
WHEN D !=0 THEN
SET @Query = "SELECT Username, Sender, Mobile,
Type,
CASE
WHEN Type = 'TEXT' OR Type = 'FLASH' THEN
Message
WHEN Type = 'UNICODE' OR Type = 'UNICODE-FLASH' THEN
CONVERT( UNHEX(Message) USING utf8)
ELSE
Message
END AS Message, Length, MessageId,
IFNULL((SELECT Status FROM DLRStatus WHERE MessageId = a.MessageId),IF((DATE(SentAt)=CURRENT_DATE),'ENQUEUE','ACCEPTD')) as Status,
CONVERT_TZ(SentAt,iGMT,G)FROM SmscLog a WHERE Username IN( SELECT Username FROM Customers WHERE DistributorId = ? )
AND DATE(SentAt) BETWEEN ? AND ? ORDER BY SentAt DESC";
SET @DistributorId = UId;
SET @SentFrom = dtFrom;
SET @SentTo = dtTo;
SET @Lim = CONCAT(' LIMIT ', OFFSET, ROWCOUNT);
SET @Query = CONCAT(@Query, @Lim);
PREPARE Stmt FROM @Query;
EXECUTE Stmt USING @DistributorId, @SentFrom, @SentTo;
DEALLOCATE PREPARE Stmt;
WHEN MR !=0 THEN
SET @Query = "SELECT Username, Sender, Mobile,
Type,
CASE
WHEN Type = 'TEXT' OR Type = 'FLASH' THEN
Message
WHEN Type = 'UNICODE' OR Type = 'UNICODE-FLASH' THEN
CONVERT( UNHEX(Message) USING utf8)
ELSE
Message
END AS Message, Length, MessageId,
IFNULL((SELECT Status FROM DLRStatus WHERE MessageId = a.MessageId),IF((DATE(SentAt)=CURRENT_DATE),'ENQUEUE','ACCEPTD')) as Status,
CONVERT_TZ(SentAt,iGMT,G) FROM SmscLog a WHERE Username IN ( SELECT Username FROM Customers WHERE MainResellerId = ? )
AND DATE(SentAt) BETWEEN ? AND ? ORDER BY SentAt DESC";
SET @MainResellerId = UId;
SET @SentFrom = dtFrom;
SET @SentTo = dtTo;
SET @Lim = CONCAT(' LIMIT ', OFFSET, ',', ROWCOUNT);
SET @Query = CONCAT(@Query, @Lim);
PREPARE Stmt FROM @Query;
EXECUTE Stmt USING @MainResellerId, @SentFrom, @SentTo;
DEALLOCATE PREPARE Stmt;
WHEN R !=0 THEN
SET @Query = "SELECT Username, Sender, Mobile,
Type,
CASE
WHEN Type = 'TEXT' OR Type = 'FLASH' THEN
Message
WHEN Type = 'UNICODE' OR Type = 'UNICODE-FLASH' THEN
CONVERT( UNHEX(Message) USING utf8)
ELSE
Message
END AS Message, Length, MessageId,
IFNULL((SELECT Status FROM DLRStatus WHERE MessageId = a.MessageId),IF((DATE(SentAt)=CURRENT_DATE),'ENQUEUE','ACCEPTD')) as Status,
CONVERT_TZ(SentAt,iGMT,G) FROM SmscLog a WHERE Username IN ( SELECT Username FROM Customers WHERE ResellerId = ? )
AND DATE(SentAt) BETWEEN ? AND ? ORDER BY SentAt DESC";
SET @ResellerId = UId;
SET @SentFrom = dtFrom;
SET @SentTo = dtTo;
SET @Lim = CONCAT(' LIMIT ', OFFSET, ',', ROWCOUNT);
SET @Query = CONCAT(@Query, @Lim);
PREPARE Stmt FROM @Query;
EXECUTE Stmt USING @ResellerId, @SentFrom, @SentTo;
DEALLOCATE PREPARE Stmt;
WHEN SR !=0 THEN
SET @Query = "SELECT Username, Sender, Mobile,
Type,
CASE
WHEN Type = 'TEXT' OR Type = 'FLASH' THEN
Message
WHEN Type = 'UNICODE' OR Type = 'UNICODE-FLASH' THEN
CONVERT( UNHEX(Message) USING utf8)
ELSE
Message
END AS Message, Length, MessageId,
IFNULL((SELECT Status FROM DLRStatus WHERE MessageId = a.MessageId),IF((DATE(SentAt)=CURRENT_DATE),'ENQUEUE','ACCEPTD')) as Status,
CONVERT_TZ(SentAt,iGMT,G) FROM SmscLog a WHERE Username IN ( SELECT Username FROM Customers WHERE SubResellerId = ? )
AND DATE(SentAt) BETWEEN ? AND ? ORDER BY SentAt DESC";
SET @SubResellerId = UId;
SET @SentFrom = dtFrom;
SET @SentTo = dtTo;
SET @Lim = CONCAT(' LIMIT ', OFFSET, ',', ROWCOUNT);
SET @Query = CONCAT(@Query, @Lim);
PREPARE Stmt FROM @Query;
EXECUTE Stmt USING @SubResellerId, @SentFrom, @SentTo;
DEALLOCATE PREPARE Stmt;
ELSE
SET @Query = "SELECT Username, Sender, Mobile,
Type,
CASE
WHEN Type = 'TEXT' OR Type = 'FLASH' THEN
Message
WHEN Type = 'UNICODE' OR Type = 'UNICODE-FLASH' THEN
CONVERT( UNHEX(Message) USING utf8)
ELSE
Message
END AS Message, Length, MessageId,
IFNULL((SELECT Status FROM DLRStatus WHERE MessageId = a.MessageId),IF((DATE(SentAt)=CURRENT_DATE),'ENQUEUE','ACCEPTD')) AS Status,
CONVERT_TZ(SentAt,iGMT,G) FROM SmscLog a WHERE Username = ?
AND DATE(SentAt) BETWEEN ? AND ? ORDER BY SentAt DESC";
SET @Username = sUsername;
SET @SentFrom = dtFrom;
SET @SentTo = dtTo;
SET @Lim = CONCAT(' LIMIT ', OFFSET, ',', ROWCOUNT);
SET @Query = CONCAT(@Query, @Lim);
PREPARE Stmt FROM @Query;
EXECUTE Stmt USING @Username, @SentFrom, @SentTo;
DEALLOCATE PREPARE Stmt;
END CASE;
END
在这个我传递的 IGMT 是使用我们的日期函数在 php 页面中计算的,我希望在存储过程中使用这个值。
但是当我在 php 页面上执行它时,我得到一个错误:
存储过程中未定义的变量 IGMT。
有没有办法在这个存储过程中传递这个值?提前致谢..