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

我已经习惯于在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
              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”列?