Zwei Probleme bei der Verwendung einer gespeicherten Prozedur in MySQL

Below ist der Beispielcode für meine gespeicherte Prozedur, an der ich zur Zinsberechnung arbeite. Dieser Code ist nicht ausführbar, da er laut Ermittlung des Problems beim Definieren des temporären Tabellenblocks vor der Cursordeklaration ausgeführt wird. Wenn ich jedoch kürzlich nach der Cursordeklaration dasselbe definiere, wird er erfolgreich ausgeführt.

1- Meine Frage ist, dass ich diese Tabelle innerhalb des Cursors verwende, also muss ich nach dem Cursor definieren, oder ich habe etwas verpass

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- Nach erfolgreicher Ausführung der obigen gespeicherten Prozedur (Definieren einer temporären Tabelle nach der Cursordeklaration) trat beim Aufrufen des SP das folgende Problem auf:

CALL sp_interest_calculation_test ('A');

"Fehlercode: 1075 Falsche Tabellendefinition; es kann nur eine automatische Spalte geben und diese muss als Schlüssel definiert sein"

Es liegt daran, dass ich die ID nicht als Primärschlüssel definiert habe, also habe ich einfach die Spalte mit @ geänder

id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY

Ich benutze die gespeicherte Prozedur zum ersten Mal in MySQL und es war hektisch für mich, das obige Problem zu beheben. Können Sie mir die obigen Probleme und deren Gründe beschreiben und es dort trotzdem tun, um die Spalte für die automatische Nummerierung zu definieren, ohne dies als Primärschlüssel zu definieren?

Hinweis: Der Parameter sub_type wird nirgendwo verwendet und es werden im Beispielcode keine weiteren Operationen innerhalb des Cursors ausgeführt, obwohl ich mich mit der Berechnung von hohen Zinsen innerhalb des Blocks befasse.

Vielen Dank im Voraus und hoffe, dass Sie etwas Interesse an dieser Frage zahlen. (Ich habe für diese Probleme nichts Genaues gefunden). Ich suche auch nach Alternativen, einfach muss ich Lastschrift, Gutschrift, Saldo für jedes Hauptbuch berechnen, ich habe es ohne Schleife in einer einzelnen Abfrage versucht, aber die Ausführung endet ni

Antworten auf die Frage(4)

Ihre Antwort auf die Frage