Mysql 我可以在一个存储过程中使用两个表吗
我试图编写一个存储过程,其中我使用两个表根据一个条件获取数据,但它给出了错误 我的SP是: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.
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
- 此外,您还需要将分隔符重置为
代码>在末尾
- 如果语法为
(ELSE和IF之间没有空格)ELSEIF。。。。然后
- 另外,我认为您可能需要使用子句将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中使用它。