MySQL存储过程中的数据值不正确

MySQL存储过程中的数据值不正确,mysql,database,stored-procedures,dynamic-sql,Mysql,Database,Stored Procedures,Dynamic Sql,此处日期的数据类型应为“datetime”。但是,当我调用该过程时,它返回错误代码,指出要检查正确语法的内容 当我将开始日期和结束日期的数据类型更改为“日期”时,调用将返回错误消息,指出日期值不正确。虽然创建了视图,但它是空的 第一次使用这个网站。谢谢各位 ----------更新------- 我找到了解决办法。它只是简单地在日期前后加上这个。 -其中lud_dtm>=',SetStartDate',和lud_dtm

此处日期的数据类型应为“datetime”。但是,当我调用该过程时,它返回错误代码,指出要检查正确语法的内容

当我将开始日期和结束日期的数据类型更改为“日期”时,调用将返回错误消息,指出日期值不正确。虽然创建了视图,但它是空的

第一次使用这个网站。谢谢各位

----------更新-------

我找到了解决办法。它只是简单地在日期前后加上这个。 -其中lud_dtm>=',SetStartDate',和lud_dtm<',SetEndDate',;'


我花了几个小时才弄清楚。lol

您必须转义单引号字符“才能将日期时间字符串括起来

DELIMITER //
DROP PROCEDURE if exists mzeng.test2//
CREATE  PROCEDURE mzeng.test2(TerminalName VARCHAR(25),tablename varchar(25), SetStartDate datetime,  SetEndDate datetime)

BEGIN
SET @t1 =CONCAT('create view mzeng.',tablename,' as SELECT * FROM ',TerminalName,'.restaurants where lud_dtm >= ', SetStartDate,' and lud_dtm < ',SetEndDate);

PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;

end//
DELIMITER ;

call mzeng.test2('otg_ewrc1', 'EWRc1_TransactionalTable2','2017-07-01 04:00:00','2017-07-02 04:00:00');
连接后的result:

SET @t1 =CONCAT('create view mzeng.',tablename,' as SELECT * FROM '
      ,TerminalName,'.restaurants '
      ,'where lud_dtm >= \'', SetStartDate,'\' and lud_dtm < \'',SetEndDate,'\''); 

不能在过程中使用动态表名创建视图。准备好的语句不能包含DDL指令,如create view、create table或类似指令,只允许DML指令。我确信我可以。我有另一个查询,它不需要使用日期作为参数,并且工作得非常好。是的。它是。而且工作也很好。该死的。我花了几个小时才弄明白除了。。。您永远不应该手动执行此操作。这就是为什么其中lud_dtm>=',QUOTESetStartDate',和。。。这是正确的答案。它不易受SQL注入的攻击,并且正确处理空值,而此答案不处理空值。
"... lud_dtm >= '2017-07-01 04:00:00' and lud_dtm < '2017-07-02 04:00:00' "