У меня есть хранимая процедура Mysql,
Я пытаюсь вызвать другую хранимую процедуру из первой,
Но я получаю следующую ошибку при выполнении do -
Error Code: 1242. Subquery returns more than 1 row
1. Ниже приводится первая хранимая процедура -
CREATE DEFINER=`root`@`localhost` PROCEDURE `process_snapshot`()
BEGIN
DECLARE snaptime INT;
DECLARE snapshot_year INT;
DECLARE partition_name VARCHAR(17);
DECLARE isPartionPresent varchar(64);
DECLARE addPartition VARCHAR(100);
SET snaptime := UNIX_TIMESTAMP(CONCAT(DATE_SUB(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 DAY),' 23:59:59'));
SET snapshot_year := DATE_FORMAT(NOW(),'%Y');
SET partition_name := CONCAT('snapshot_',snapshot_year);
SET isPartionPresent := (SELECT PARTITION_NAME
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_NAME = 'snapshot'
AND PARTITION_NAME = partition_name);
IF @isPartionPresent IS NOT NULL THEN
CALL snapshot;
ELSE
SET @addPartition = CONCAT('ALTER TABLE wor_snapshot ADD PARTITION (PARTITION ', partition_name, ' VALUES IN (', snapshot_year,'))');
PREPARE _stmt FROM @addPartition;
EXECUTE _stmt;
DEALLOCATE PREPARE _stmt;
CALL snapshot;
END IF;
END
2. Ниже приводится вторая хранимая процедура -
Хранимая процедура снимок вставляет данные с помощью оператора select.
CREATE DEFINER=`root`@`localhost` PROCEDURE `snapshot`()
BEGIN
DECLARE snaptime INT;
SET snaptime := UNIX_TIMESTAMP(CONCAT(DATE_SUB(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 DAY),' 23:59:59'));
INSERT into snapshot
(user_id, latest_transaction_id, balance, last_transaction_timestamp, last_transaction_date, snapshot_date, year)
SELECT
T2.user_id,
T2.transaction_id AS latest_transaction_id,
T2.new_balance AS balance,
T2.created_date AS last_transaction_timestamp,
DATE_FORMAT(FROM_UNIXTIME(T2.created_date),
'%Y-%m-%d %I:%i:%S') AS last_transaction_date,
DATE_FORMAT(NOW(), '%Y-%m-%d') AS snapshot_date,
DATE_FORMAT(NOW(), '%Y') AS year
FROM
(SELECT
user_id, MAX(transaction_id) maxTransID
FROM
transaction
WHERE
created_date < snaptime
GROUP BY user_id) Tmp
JOIN
transaction T2 ON Tmp.MaxTransID = T2.Transaction_ID;
END
Я пытался преобразовать вторую хранимую процедуру в функцию,
Но в этом случае я не смог получить snaptime
в функции.