mysql - 我可以在单个存储过程中使用 2 个表吗
问题描述
我正在尝试编写一个存储过程,其中我使用 2 个表来根据条件获取数据,但它给出了错误。
我的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 //
mysql错误:
以下查询失败:“CREATE DEFINER=
root
@localhost
PROCEDUREselect_track_notifications
(INdatePosted
DATETIME, INrecipientId
INT, INpackageId
INT, INaccountId
INT) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 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() 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"
解决方案
END
您在陈述的末尾有一个额外的内容。- 此外,您需要将分隔符重置为
;
最后。 - Else if 语法是
ELSEIF .... THEN
(ELSE 和 IF 之间没有空格)。 - 另外,我认为您可能需要使用
SELECT .. INTO
子句将选择查询的结果存储到变量中(您将在变量上执行进一步操作)。
请尝试以下操作:
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 ;
推荐阅读
- r - 如何在R中找到数据框的两列给出相同结果的行数?
- automation - 云存储:如何检查对象上的 md5
- php - 如何将 rel='nofollow' 添加到 woocommerce 产品过滤器?
- iframe - 我希望主页在没有模式 iframe 加载的情况下打开
- c# - 使用带有单选按钮的 Switch Case 并将结果附加到列表框
- c - 从C中的文本文件中读取行
- ios - 在 UIAlertController 操作中使用云函数时是否存在竞争条件?
- sharepoint - 使用 SharePoint Online,如何删除属于“链接”而不是“帖子”的新闻项目?
- oracle - 对oracle表中的多值列进行排序
- javascript - 在 redux 中将一个更大的 reducer 的一部分委托给它自己的 reducer