Получение двух проблем при использовании хранимой процедуры в 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 нигде не используется, и в образце кода не выполняется больше операций с курсором, хотя я имею дело с расчетом большого интереса внутри блока.
Заранее большое спасибо и надеюсь, что все вы проявите интерес к этому вопросу. (Я не нашел ничего точного по этим вопросам). Я также ищу альтернативы, просто я должен рассчитать дебет, кредит, баланс для каждой бухгалтерской книги, я пробовал это без цикла в одном запросе, но выполнение никогда не заканчивается.