2013-01-07 6 views
13

DOMANDA PRELEVATA! Quando scrivo correttamente tutto, il problema scompare!Ambito delle tabelle temporanee create nella procedura memorizzata MySQL

Ho una procedura memorizzata MySQL che crea una tabella temporanea. Quando chiamo la procedura dal prompt mysql, sembra che funzioni correttamente, ma se seleziono SELECT COUNT (*) dalla tabella temporanea, viene visualizzato un errore che dice che la tabella non esiste.

Una tabella temporanea creata all'interno di una stored procedure cessa di esistere al termine della procedura memorizzata?

mysql> delimiter // 
mysql> drop procedure if exists sp_temp_reciepts// 
mysql> create procedure sp_temp_receipts() 
begin 
    drop temporary table if exists receipts; 
    create temporary table receipts 
    ( ... snip ... 
); 
    insert into receipts 
    select ... snip ... 
end// 
mysql> delimiter ; 
mysql> call sp_temp_reciepts(); 
Query OK, 46903 rows affected, 1 warning (2.15 sec) 
mysql> select count(*) from receipts; 
ERROR 1146 (42S02): Table 'receipts' doesn't exist 
+0

No. È ancora lì. Puoi includere il codice qui? – ethrbunny

+0

delimitatore // procedura di rilascio se esiste sp_temp_reciepts // creare la procedura sp_temp_receipts() inizio – user1956095

+0

Si prega di modificare il post originale per includere il codice. – ethrbunny

risposta

13

Questa domanda ha più di un anno. Merita una risposta. Ecco qui:

Ho appena visto questa domanda oggi in DBA StackExchange: How long will a temporary MEMORY table persist if I don't drop it (MySQL). Ho appena risposto. In parte ho detto questo:

Secondo the Book

kdsjx

Capitolo 5 ha una sottovoce Imposta Tornando risultato da un'altra stored procedure.

Si dice nel paragrafo 2 a pagina 117:

Purtroppo, l'unico modo per passare un set di risultati da una stored procedure a un altro è quello di superare i risultati tramite una tabella temporanea. Questa è una soluzione scomoda b, e - poiché la tabella temporanea ha un ambito durante l'intera sessione - crea molti degli stessi problemi di manutenibilità sollevati dall'uso di variabili globali. ma se un programma memorizzato deve fornire un altro programma memorizzato con i risultati, allora una tabella temporanea può essere la soluzione migliore.

Sebbene la domanda sia stata interrotta a causa di errori di ortografia, questo punto di vista deve essere espresso e appreso da tutti coloro che chiamano MySQL Stored Procedure e necessitano di dati disponibili.