【发布时间】:2021-04-01 18:00:40
【问题描述】:
我必须编写一个存储过程 MYSQL 来从表中获取数据,以便每天使用通知模板向所有客户发送有关汇率的通知。
- 客户
customerCode | name | nationCode
0000001 | A | VNM
0000002 | B | CNH
- SYSTEM_NATION
id | nationCode | ccy
1 | VNM | VND
2 | CNH | CNY
- EXCHANGE_RATE
id | ccyFrom | ccyTo | rate
1 | JPY | VND | 0.1
2 | JPY | CNY | 0.3
4.NOTIFICATION_TOKEN
id | customerCode | tokenId
1 | 0000001 | tokenExample1
2 | 0000002 | tokenExample2
现在我想获取数据以发送与nationCode 对应的每个客户的每日费率通知,其文本形式如下:
Exchange rate: 1 JPY = {noti}exchangeRate{noti} {noti}varNotiCCYTo{noti}.
我期待
客户 0000001
Exchange rate: 1 JPY = 0.1 VND.
客户 0000002
Exchange rate: 1 JPY = 0.3 CNY.
我有存储过程来从我上面提到的表中获取数据
DELIMITER $$
USE `gojp`$$
CREATE PROCEDURE `NotiGetExchangeRateEveryDay`()
DECLARE varNotiBODY nVarchar (9000);
DECLARE varNotiCCYTo nvarchar(3);
DECLARE varNotiExchangeRate Numeric (30,2);
###########################
#IMPORTANT: when I call this procedure, it responses
#Error Code: 1172. Result consisted of more than one row
#I think problem in this query:
*select ex.ccyTo, ex.rate into varNotiCCYTo, varNotiExchangeRate from CUSTOMER cus
inner join SYSTEM_NATION sys on cus.nationCode= sys.nationCode
inner join EXCHANGE_RATE ex on ex.ccyTo = sys.ccy;*
##########################
set varNotiBODY = (SELECT REPLACE(varNotiBODY, '{noti}exchangeRate{noti}', ifnull(varNotiExchangeRate,'')) from dual);
set varNotiBODY = (SELECT REPLACE(varNotiBODY, '{noti}varNotiCCYTo{noti}', ifnull(varNotiCCYTo,'')) from dual);
After that I want to insert all this table to get list of notification was sent.
INSERT INTO `gojp`.`NOTIFICATION_QUEUE`
(`customerCode`,
`deviceID`,
`ntfBody`,
`createdDate`
)
select
noti.customerCode,
noti.tokenId,
varNotiBODY,
now()
from NOTIFICATION_TOKEN noti
inner join CUSTOMER cus on noti.customerCode = cus.customerCode;
END$$
DELIMITER ;
我想获取每个客户的汇率数据,然后替换为{noti}exchangeRate{noti}。但是,它返回多个结果,所以我不能只插入一个参数。
那么,谁能给我一个解决方案?
【问题讨论】: