In che modo MySQL restituisce un set di risultati da una procedura memorizzata?


16

Sto cercando di concentrarmi sulle procedure memorizzate da utilizzare in un'applicazione Web. Mi sembra che qualunque sia l'ultima affermazione in una stored procedure MySQL, sembra essere ciò che viene trattato come set di risultati di quella procedura. Sfortunatamente, sembra che ci siano riferimenti nei documenti MySQL che affermano che una procedura può restituire più set di risultati. Come viene attivato questo comportamento? Come posso dire al server MySQL che voglio esplicitamente restituire solo un set di risultati?

(Ad esempio, ho una query che fa un SELECT e alcuni inserti. Non voglio dire ai clienti degli inserti, ma voglio che al cliente venga assegnato il set di risultati del SELECT ....)

Risposte:


17

Ogni istruzione SELECT che non viene inserita in una tabella o in una variabile produrrà un set di risultati.

Se si desidera che la procedura memorizzata restituisca solo un set di risultati, assicurarsi di disporre di una sola istruzione SELECT. Se hai altre istruzioni SELECT, assicurati che inseriscano i risultati in una tabella o variabile.

AGGIORNAMENTO
Ecco alcuni esempi di procedure memorizzate.

Questa procedura memorizzata restituirebbe un set di risultati:

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 ;

Questa procedura memorizzata restituirebbe due set di risultati:

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 ;

Ah, quindi se va in una tabella o variabile, di conseguenza non viene incluso? Come si accede a questo; usando ad es. SELEZIONA INTO?
Billy ONeal,

Sì alla prima domanda. Non sono chiaro sulla tua seconda domanda. Se voglio salvare un valore in una variabile locale all'interno della stored procedure, corro qualcosa di simile: SELECT column_name LIMIT 1 INTO local_variable_name;.
dabest1,

Query di esempio sopra avrebbe dovuto essere: SELECT column_name FROM table LIMIT 1 INTO local_variable_name;.
dabest1,

se voglio ottenere variabili dopo la chiamata stored_procedure_name da un'altra stored procedure, non riesco a impostare result = call stored_procedure_name () ;, come risolverlo? se uso il cursore, DECLARE c_dept CURSOR FOR call get_info_user_visitstatistics () errore di sintassi
Amitābha
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.