Ниже приведен пример кода моей хранимой процедуры, в которой я работаю для расчета процентов. Этот код не является исполняемым, поскольку в соответствии с поиском его проблемы при определении создания временного блока таблицы перед объявлением курсора, но если я определяю то же самое недавно после объявления курсора, то он выполняется успешно.Получение двух проблем при использовании хранимой процедуры в MySQL
1- Мой вопрос: я использую эту таблицу внутри курсора, поэтому мне нужно определить после курсора, или я пропустил что-нибудь?
CREATE PROCEDURE `sp_interest_calculation_test`(
IN sub_type CHAR(1)
)
BEGIN
DECLARE s_ledger_id INT;
DECLARE s_start, s_end, s_tran INT DEFAULT 0;
**DROP TABLE IF EXISTS tmp_interest;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_interest(
id int(11) NOT NULL AUTO_INCREMENT,
ledger_id INT UNSIGNED,
dr_amount INT,
cr_amount INT,
balance INT
);**
DECLARE cur_saving_acc CURSOR FOR
SELECT SQL_CALC_FOUND_ROWS 1;
OPEN cur_saving_acc;
SET s_end = (SELECT FOUND_ROWS());
WHILE s_start<s_end DO
FETCH cur_saving_acc INTO s_ledger_id;
INSERT INTO tmp_interest(ledger_id)
SELECT s_ledger_id;
SELECT * FROM tmp_interest;
/*Interest calculation logic ends here */
SET s_start = s_start+1;
END WHILE;
CLOSE cur_saving_acc;
END
2- После успешного выполнения выше хранимой процедуры (определение временной таблицы после объявления курсора), я получил следующий вопрос, когда я называю SP:
CALL sp_interest_calculation_test ('A');
«Код ошибки: 1075 Неправильный определение таблицы, и может быть только один автоматический столбец, и он должен быть определен как ключ «
Это потому, что я пропустил определение идентификатора в качестве первичного ключа, поэтому я просто изменил столбец с помощью
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
Я использую хранимую процедуру в MySQL в первый раз, и мне было неловко исправлять вышеупомянутую проблему, так что, пожалуйста, опишите мне вышеперечисленные проблемы и их причины, и там все равно определите колонку автоматического номера, как первичный ключ?
Примечание: Параметр sub_type не используется нигде, и в примере кода не выполняется больше операций внутри курсора, хотя я имею дело с интенсивным вычислением процентов внутри блока.
Благодарим вас за внимание и надеемся, что вы поинтересуетесь этим вопросом. (Я не нашел ничего конкретного для этих вопросов). Я также ищу альтернативы, просто я должен рассчитать дебет, кредит, баланс для каждого регистра, я пробовал его без цикла в одном запросе, но исполнение никогда не заканчивается.
Хороший ответ Майкл – Drew