MYSQL - problema con Temporary Table

martedì 23 settembre 2008 - 10.56

AntCiar Profilo | Expert

Salve a tutti.
Ho creato una stored procedure che al suo interno crea una tabella temporanea "tab1". Ho usato il seguente codice:

Drop temporary table if exist tab1;
create temporary table tab1 select ......

successivamente utilizzo la tabella temporanea appena creata in altre istruzioni sql.

Il problema sta nel fatto che non riesco a sincronizzare la creazione e l'utilizzo della tabella temporanea.
Mi spiego meglio: ho l'impressione che dopo la chiamata a "create temporary table tab1" la tabella temporanea non è ancora creata e quando tento di utilizzarla mi va in errore (errore: unknown table tab1). Se inaftti inserisco l'istruzione SELECT 'aaaa' INTO OUTFILE 'C:\\prova.txt' la stored non va in errore perchè "do tempo" a MySql di creare la tabella.

Qualcuno sa come fare per "aspettare" la creazione della tabella temporanea? (no cicli while)

Grazie a tutti per l'aiuto.

Brainkiller Profilo | Guru

>successivamente utilizzo la tabella temporanea appena creata
>in altre istruzioni sql.

Ma queste istruzioni SQL che utilizzi le utilizzi dal codice .NET o dalla Stored Procedure ? Immagino dal codice .NET se no sarebbe comica la cosa. Non riesci a spostare la Business Logic dal codice .NET alla Stored Procedure ? Così sei sicuro che venga creata prima dell'uso delle altre istruzioni ?

>Qualcuno sa come fare per "aspettare" la creazione della tabella
>temporanea? (no cicli while)

Puoi usare Thread.Sleep(1000) per temporeggiare 1 secondo anche se non mi piace granchè come cosa. Oppure sempre un do..while anche se hai detto di no con dentro il Thread.Sleep(1000) il tutto in un try..catch in modo chè appena la tabella si rende disponibile il try viene eseguito correttamente ed esci dal ciclo.
Inoltre con lo Sleep non ti gira a realtime mangiandoti cicli di clock.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

alx_81 Profilo | Guru

>Salve a tutti.
Ciao!

>Ho creato una stored procedure che al suo interno crea una tabella
>temporanea "tab1". Ho usato il seguente codice:
>
>Drop temporary table if exist tab1;
>create temporary table tab1 select ......
>
>successivamente utilizzo la tabella temporanea appena creata
>in altre istruzioni sql.
>Il problema sta nel fatto che non riesco a sincronizzare la creazione
>e l'utilizzo della tabella temporanea.
>Mi spiego meglio: ho l'impressione che dopo la chiamata a "create
>temporary table tab1" la tabella temporanea non è ancora creata
>e quando tento di utilizzarla mi va in errore (errore: unknown
>table tab1). Se inaftti inserisco l'istruzione SELECT 'aaaa'
>INTO OUTFILE 'C:\\prova.txt' la stored non va in errore perchè
>"do tempo" a MySql di creare la tabella.
mmmh.. non credo proprio sia un problema di tempo. Anche perchè passata l'istruzione di create, la tabella deve esistere se l'istruzione la crea.
Il problema potrebbe essere nel fatto che probabilmente se quella select non torna nulla non viene creata la tabella vuota?
Non conoscendo bene mysql non saprei dirti di più..

>Grazie a tutti per l'aiuto.
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

AntCiar Profilo | Expert

Il codice è tutto scritto nella stored e non posso spostare nulla in NET.

Mi serve creare una tabella temporanea perchè successivamente ho bisogno di scorre i dati e riga-riga effettuare altre procedure. La select che utilizzo per riempire la tabella temporanea restituisce dati. Penso che il problema del "tempo" ci sta. Infatti se metto la scrittura su file di una stringa subito dopo la creazione della tabella, la stored funziona. Se tolgo la scrittura su file la stored va in errore (unknown table tab1).

alx_81 Profilo | Guru

>Penso che il problema del "tempo" ci sta. Infatti se metto
>la scrittura su file di una stringa subito dopo la creazione
>della tabella, la stored funziona. Se tolgo la scrittura su file
>la stored va in errore (unknown table tab1).
Sull'help c'è questo:

Note
CREATE TABLE does not automatically commit the current active transaction if you use the TEMPORARY keyword.

Fai una transazione esplicita e Committala

Dovrebbe andare tutto poi..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5