Mysql 我可以在一个存储过程中使用两个表吗

Mysql 我可以在一个存储过程中使用两个表吗,mysql,stored-procedures,Mysql,Stored Procedures,我试图编写一个存储过程,其中我使用两个表根据一个条件获取数据,但它给出了错误 我的SP是: DELIMITER // CREATE PROCEDURE select_notifications(IN datePosted DATETIME,IN recipientId INT,IN packageId INT,IN accountId INT) BEGIN IF datePosted < NOW() THEN SELECT tn.subject_line,tn.message,tn.

我试图编写一个存储过程,其中我使用两个表根据一个条件获取数据,但它给出了错误

我的SP是:

DELIMITER //
CREATE PROCEDURE select_notifications(IN datePosted DATETIME,IN recipientId INT,IN packageId INT,IN accountId INT)
BEGIN
 IF datePosted < NOW() THEN
  SELECT tn.subject_line,tn.message,tn.message_type FROM track_notifications AS tn WHERE tn.package_id=packageId AND tn.recipient_id=recipientId AND tn.account_id=accountId AND tn.date_posted = datePosted;
 ELSE IF datePosted > NOW()
  SELECT subject_line,message,message_type FROM track_notifications_new WHERE package_id=packageId AND recipient_id=recipientId AND account_id=accountId AND date_posted = datePosted;
 END IF;
END
END //
分隔符//
创建过程选择通知(在datePosted DATETIME、recipientId INT、packageId INT、accountId INT中)
开始
如果datePostedNOW()
从track_notifications_new中选择subject_line、message、message_type,其中package_id=packageId,recipient_id=recipientId,account_id=accountId,date_posted=datePosted;
如果结束;
结束
结束//
Mysql错误:

以下查询失败:“创建定义器=
根目录
@
本地主机
程序
选择跟踪通知
(在
日期公告
日期时间,在
recipientId
INT,在
packageId
INT,在
accountId
INT)中 DETERMINISTIC包含SQL安全定义程序开始日期是否已发布< 现在()然后从中选择tn.subject\u行、tn.message、tn.message\u类型 跟踪tn通知,其中tn.package\u id=packageId和 tn.recipient_id=recipientId和tn.account_id=accountId和 tn.date_posted=datePosted;否则,如果datePosted>NOW(),则选择 主题行、消息、消息类型来自曲目通知新位置 包裹id=包裹id和收件人id=收件人id和 账户id=账户id和发布日期=发布日期;如果结束;结束“

  • 您在对账单末尾有一个额外的
    END
  • 此外,您还需要将分隔符重置为
    在末尾
  • 如果语法为
    ELSEIF。。。。然后
    (ELSE和IF之间没有空格)
  • 另外,我认为您可能需要使用子句将select查询的结果存储到变量中(您将对变量执行进一步的操作)
请尝试以下操作:

DELIMITER //
DROP PROCEDURE IF EXISTS select_notifications //
CREATE PROCEDURE select_notifications(IN datePosted DATETIME,
                                      IN recipientId INT,
                                      IN packageId INT,
                                      IN accountId INT)
BEGIN
 IF datePosted < NOW() THEN
  SELECT tn.subject_line,
         tn.message,
         tn.message_type 
  FROM track_notifications AS tn 
  WHERE tn.package_id=packageId AND 
        tn.recipient_id=recipientId AND 
        tn.account_id=accountId AND 
        tn.date_posted = datePosted;

 ELSEIF datePosted > NOW() THEN 
  SELECT subject_line,
         message,
         message_type 
  FROM track_notifications_new 
  WHERE package_id=packageId AND 
        recipient_id=recipientId AND 
        account_id=accountId AND 
        date_posted = datePosted;
 END IF;
END //

DELIMITER ;
分隔符//
删除过程(如果存在)选择\u通知//
创建过程选择通知(在datePosted DATETIME中,
在recipientId INT中,
在packageId INT中,
在accountId INT中)
开始
如果datePostedNOW()然后
选择主题行,
消息
消息类型
从曲目\u通知\u新建
其中package_id=packageId和
接收方id=接收方id和
account\u id=accountId和
发布日期=发布日期;
如果结束;
结束//
定界符;

你刚刚忘记了
然后在
ELSE IF
条件之后
了……我也试过了,但是得到了相同的错误,这就是为什么我在该错误之后删除了该错误,你的错误是什么?更新了我的问题,请检查一次。每个IF都必须有一个THEN和一个end IF(你的ELSE IF没有)您可能没有设置分隔符@prasadchinthala请务必阅读
select。。进入
(答案中的链接)-您需要在SP中使用它。