Obtendo dois problemas ao usar o procedimento armazenado no MySQL

Abaixo está o código de exemplo do meu Stored Procedure no qual estou trabalhando para o cálculo de juros. Esse código não é executável porque, de acordo com o problema de obtenção, ao definir a criação de um bloco de tabela temporário antes da declaração do cursor, mas se eu definir a mesma coisa recentemente após a declaração do cursor, ele será executado com êxito.

1- Minha pergunta é que estou usando essa tabela dentro do cursor, então preciso definir depois do cursor ou perdi alguma coisa?

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- Após a execução bem-sucedida do procedimento armazenado acima (definindo a tabela temporária após a declaração do cursor), obtive o seguinte problema ao ligar para o SP:

CALL sp_interest_calculation_test ('A');

"Código de erro: 1075 Definição de tabela incorreta; pode haver apenas uma coluna automática e deve ser definida como uma chave"

É porque eu perdi para definir id como chave primária, então eu simplesmente mudei de coluna com

id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY

Eu estou usando o procedimento armazenado no MySQL pela primeira vez e foi um caos para mim corrigir o problema acima, então você pode me descrever os problemas acima e seus motivos e, de qualquer maneira, definir a coluna do número automático sem definir isso como chave primária?

Nota: O parâmetro sub_type não é usado em nenhum lugar e não há mais operações executadas no cursor no código de amostra, embora eu esteja lidando com cálculos de juros pesados dentro do bloco.

Muito obrigado antecipadamente e espero que todos vocês paguem algum interesse nesta questão. (Não encontrei nada exato para esses problemas). Também estou procurando alternativas, simplesmente tenho que calcular débito, crédito, saldo para cada razão, tentei sem loop em uma única consulta, mas a execução nunca termina.

questionAnswers(2)

yourAnswerToTheQuestion