it-swarm.com.de

Wie gibt MySQL eine Ergebnismenge aus einer gespeicherten Prozedur zurück?

Ich versuche, mich mit gespeicherten Prozeduren für die Verwendung in einer Webanwendung vertraut zu machen. Es scheint mir, dass alles, was die letzte Anweisung in einer gespeicherten MySQL-Prozedur ist, als Ergebnismenge dieser Prozedur behandelt wird. Leider scheint es in den MySQL-Dokumenten Verweise zu geben, die besagen, dass eine Prozedur mehrere Ergebnismengen zurückgeben kann. Wie wird dieses Verhalten ausgelöst? Wie kann ich dem MySQL-Server mitteilen, dass explizit nur eine Ergebnismenge zurückgegeben werden soll?

(Zum Beispiel habe ich eine Abfrage, die ein SELECT und einige Einfügungen ausführt. Ich möchte den Clients nichts über die Einfügungen erzählen, aber ich möchte, dass dem Client die Ergebnismenge des SELECT gegeben wird ....)

16
Billy ONeal

Jede SELECT-Anweisung, die nicht in eine Tabelle oder Variable eingefügt wird, erzeugt eine Ergebnismenge.

Wenn Ihre gespeicherte Prozedur nur eine Ergebnismenge zurückgeben soll, stellen Sie sicher, dass Sie nur eine SELECT-Anweisung haben. Wenn Sie andere SELECT-Anweisungen haben, stellen Sie sicher, dass diese Ergebnisse in eine Tabelle oder Variable einfügen.

UPDATE
Hier sind Beispiele für gespeicherte Prozeduren.

Diese gespeicherte Prozedur würde eine Ergebnismenge zurückgeben:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;
END;;
DELIMITER ;

Diese gespeicherte Prozedur würde zwei Ergebnismengen zurückgeben:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;

    SELECT * FROM table_2;
END;;
DELIMITER ;
17
dabest1