mySql存储过程不返回数据
我已经习惯于在MS SQL中工作,我正在努力让这个mySql存储过程正常工作 我知道有数据要提取,但没有返回mySql存储过程不返回数据,mysql,mysql-workbench,Mysql,Mysql Workbench,我已经习惯于在MS SQL中工作,我正在努力让这个mySql存储过程正常工作 我知道有数据要提取,但没有返回 DELIMITER // /* Author: Jessie Brown Date: 8/17/13 Notes: Template Creation Comments: Comments created in the header area will NOT be stored in the database write
DELIMITER //
/* Author: Jessie Brown
Date: 8/17/13
Notes: Template Creation
Comments: Comments created in the header area will NOT be stored in the database write
Comments created AFTer the begin statement will be retained within the database write
*/
-- checks to see if stored procedure exists
-- if exists the procedure is dropped and recreated
DROP PROCEDURE IF EXISTS `reportLogExceptions`//
-- Creates new procedure
CREATE PROCEDURE reportLogExceptions (IN logId varchar(50),
IN groupId varchar(50),
IN fromDate varchar (50),
IN toDate varchar(50))
BEGIN
/*
report name: Log Exceptions
Test Query: CALL reportLogExceptions('1','1','1378385650','1378472050')
--------------------------------------------------------------------------
Declare variables*/
DECLARE logInS varchar(50);
DECLARE groupIdS varchar (50);
/*
Sets the variables to use for the SELECT query
*/
CASE
WHEN logInS = '-1' THEN
SET logInS = ''%'';
ELSE SET logInS = logInS;
END CASE;
CASE
WHEN groupIdS = '-1' THEN
SET groupIdS = ''%'';
Else SET groupIdS = groupIdS; END Case;
SELECT g.groupId,g.name AS groupName,l.logId,l.name AS logName, i.itemID,
i.name AS itemName, le.userName,completed, i.optimalMin,i.optimalMax ,value
FROM groups g
JOIN LOGS l ON g.groupID = l.groupId
JOIN logExceptions le ON l.logID = le.logID
JOIN items i ON l.logId = i.logId
WHERE l.logID LIKE logInS
AND g.groupID LIKE groupIdS
AND le.completed
BETWEEN FROM_UNIXTIME(fromDate / 1000)
AND FROM_UNIXTIME (toDate / 1000);
END//
DELIMITER ;
调用我正在使用的存储过程
CALL reportLogExceptions('-1','-1',' 1359676800','1362095999')
首先,
案例
语句中的逻辑无效
您不必参考输入参数logId
和groupId
,而是将logInS
和groupId
分别与自身进行比较。因此,这些变量中的值总是NULL
s
下面是演示演示
你很可能是有意要这样做的
SET logInS=CASE logId当'-1'然后''%1'时,ELSE logId结束;
设置groupId=CASE groupId,当'-1'然后''%1',否则groupId结束时;
这里是演示
另外,您对所有参数使用
VARCHAR
的选择似乎很奇怪。使用适当的数据类型(例如INT
用于logId
和groupId
和DATETIME
,TIMESTAMP
或INT
用于fromDate
和toDate
取决于logExceptions.已完成的列)使用的数据类型) 您是否遇到语法错误?我不认为MySQL使用''%'
语法。我认为应该是setgroupids='%'代码>。完成的数据类型是什么?进度!我确实必须删除fromDate和toDate,直到我弄清楚它们是如何传递的,所以我现在只处理代码的case部分!我使用上面的代码来替换我的case语句。我现在遇到的问题是,当logId或groupId=除-1之外的任何值时,我没有得到任何数据返回。例如,如果我使用callreportlogexceptions('1','3'),我不会得到任何返回的数据。我之所以将所有内容都作为varChar,是因为客户端告诉我所有变量都作为字符串传递,这就是为什么我试图在查询中转换fromDate和toDate。我发现了case语句的问题。我需要调整变量的发送顺序(groupId,logId),而不是相反的方式。现在我只需要解决今天和明天的问题-有什么建议吗?sqlFiddle工具也很棒-你有关于如何使用这个工具的教程吗!再次感谢您的帮助@您非常欢迎:“为了帮助您处理日期,您必须回答我的问题:<代码> >代码>完成> <代码>列> LogExabuts< <代码>表。@如果您觉得答案是有用的,请考虑它。数据类型是一个时间戳——我使用的代码。[和le.在从\u UNIXTIME(从日期/1000)到\u UNIXTIME(从日期/1000)之间完成]来自原始报告-在与干系人交谈时,他说“toDate”是作为字符串传递的,但不知何故,这毫无意义。我更改了声明的IN类型,现在在执行时出现了一个错误—“1不正确的日期时间值:'1359676800'对应于第1行SQL.SQL 1中的“fromDate”列?