【问题标题】:How do to do an if statement in a stored procedure如何在存储过程中执行 if 语句
【发布时间】:2014-05-09 01:08:03
【问题描述】:

基本上,如果 SystemFeedbackidParam 不为空,我将传递我的参数 SystemFeedbackidParam,做一件事,如果是,则做另一件事。我可以在 SQL 中执行此操作,但执行此操作的方法是 mysql 让我望而却步。

谢谢!

创建过程`_Insert_FeedBack`(
   反馈类型参数 varchar(20),
   反馈SubjectParam varchar(200),
   FeedbackTextParam 文本,
   反馈HTMLParam 长文本,
   SubmittedByParam varchar(20),
   SubmittedDateParam 日期时间,
   SystemFeedbackidParam int)
   开始
      IF (SystemFeedbackidParam 不为空)
      然后
--/*将子记录插入tblfeedbackitems */
         插入到 tblfeedbackitems(SystemFeedbackId,
                                      反馈类型,
                                      反馈文本,
                                      反馈HTML,
                                      由...所提交,
                                      提交日期)
         值(系统反馈idParm,
                 反馈类型参数
                                  ,
                 反馈文本参数
                                  ,
                 反馈HTML参数
                                  ,
                 提交者参数
                                 ,
                 提交日期参数
                                   );
      别的
 --/*将父记录插入tblFeedback */

         插入到 tblfeedback(
                                 反馈类型,
                                 反馈主题,
                                 反馈状态)
         价值观(
                 反馈类型参数,
                 反馈主题参数,
                 '打开');

--/*将子记录插入tblFeedback */
         插入到 tblfeedbackitems(SystemFeedbackId,
                                      反馈类型,
                                      反馈文本,
                                      反馈HTML,
                                      由...所提交,
                                      提交日期)
         值(LAST_INSERT_ID(),
                 反馈类型参数
                                  ,
                 反馈文本参数
                                  ,
                 反馈HTML参数
                                  ,
                 提交者参数
                                 ,
                 提交日期参数
                                   );
      结束

【问题讨论】:

  • 我觉得你IF 没问题。程序前有DELIMITER 声明吗?
  • @Barmar no - 但我对我的存储过程非常谨慎,因为 mysqldump 对转储非常挑剔
  • 您的评论语法不正确。注释要么从-- 到行尾,要么在/**/ 之间,你不需要两者。当您使用-- 前缀时,它后面必须有一个空格。
  • 您需要DELIMITER 声明。否则,语句之间的; 将终止过程定义。
  • @Barmar 好的,我可以删除它仍然没有回答原始问题的所有内容

标签: mysql


【解决方案1】:

这里有几个问题:

  • 评论以 --(space) 开头 - 你的缺少空格
  • 分隔符。更改顶部的分隔符,以便分号不会终止您的过程。在底部改回来
  • 您已打开 IF 语句但未关闭它
  • 您已打开 BEGIN 但未终止关闭 END

试试这个:

Delimiter $$
CREATE PROCEDURE `_Insert_FeedBack`(
   FeedbackTypeParam       varchar(20),
   FeedbackSubjectParam    varchar(200),
   FeedbackTextParam       text,
   FeedbackHTMLParam       longtext,
   SubmittedByParam        varchar(20),
   SubmittedDateParam      datetime,
   SystemFeedbackidParam int)
   BEGIN
      IF (SystemFeedbackidParam IS NOT NULL)
      THEN
-- /*Insert Child Record into tblfeedbackitems */
         INSERT INTO tblfeedbackitems(SystemFeedbackId,
                                      FeedbackType,
                                      FeedbackText,
                                      FeedbackHTML,
                                      SubmittedBy,
                                      SubmittedDate)
         VALUES (SystemFeedbackidParm,
                 FeedbackTypeParam            
                                  ,
                 FeedbackTextParam          
                                  ,
                 FeedbackHTMLParam          
                                  ,
                 SubmittedByParam           
                                 ,
                 SubmittedDateParam         
                                   );
      ELSE
 -- /*Insert Parent Record into tblFeedback */

         INSERT INTO tblfeedback(
                                 FeedbackType,
                                 FeedbackSubject,
                                 FeedbackStatus)
         VALUES (
                 FeedbackTypeParam,
                 FeedbackSubjectParam,
                 'Open');

-- /*Insert Child Record into tblFeedback */
         INSERT INTO tblfeedbackitems(SystemFeedbackId,
                                      FeedbackType,
                                      FeedbackText,
                                      FeedbackHTML,
                                      SubmittedBy,
                                      SubmittedDate)
         VALUES (LAST_INSERT_ID(),
                 FeedbackTypeParam            
                                  ,
                 FeedbackTextParam          
                                  ,
                 FeedbackHTMLParam          
                                  ,
                 SubmittedByParam           
                                 ,
                 SubmittedDateParam         
                                   );
      END IF; 
END $$
Delimiter ;

注意:我已经修复了您的语法错误。我不知道你的代码是否真的可以工作。

【讨论】:

    【解决方案2】:

    在本站查看mysql的文档http://dev.mysql.com/doc/refman/5.0/en/if.html 在那里你可以找到所有的信息,但基本上是这样的

    IF NOT SystemFeedbackidParam THEN
    ......
     END IF;
    

    你也可以使用 else 语句。

    【讨论】:

    • 很简单,你可以这样做:IF SystemFeedbackidParam IS NOT NULL THEN here is your code ELSE the other code END IF;我认为这对你有用
    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多