2009-10-19 20 views
6

Sono abituato all'analizzatore di query di MSSQL. Avendo bisogno di convertire alcuni SP per un progetto di hobby, sto avendo problemi nel rendere la transizione al browser di query mysql, in particolare quando si tratta di utilizzare variabili. Sto essenzialmente cercando di simulare una procedura prima che sia una procedura.Browser query MySQL: utilizzo delle variabili

Così in Query Analyzer che avrei scritto qualcosa di simile ...

delcare @var1 int 
declare @var2 varchar(30) 

set @var1 = 17 --some thing i'd normally pass to the SP 
set @var2 = 'something else id pass to the SP' 

SELECT * 
FROM table 
WHERE id = @var1 
OR textcolumn = @var2 

Poi mi piacerebbe giocare con la query (perché è molto più complessa che l'esempio uno) fino a quando ho capito bene o sostituirò i valori per le variabili perché vengono utilizzati come 100 volte nel corpo della query e questo è un sacco di riscrittura.

Quindi la mia domanda è come farlo funzionare nel browser di query di MySQL.

Comprendo che sta eseguendo solo qualsiasi istruzione evidenziata (il cursore si trova su quella riga o sul blocco di testo). E penso di capire che il pulsante "Inizia transazione" dovrebbe essere usato in qualche modo, ma non riesco a farlo andare. Ecco cosa ho fino ad ora

DELIMITER $$ 

begin 
declare var1 varchar(1) default 'W'; 
    select count(*) from gamestatspitchers where wls = var1; 
end$$ 

delimiter ; 

Grazie per qualsiasi aiuto. Non riesco a risolvere questo problema.

+0

bella domanda !. Anch'io vorrei vedere la risposta a questo. –

risposta

0

Come utilizzare una scheda di script anziché una scheda di gruppo di risultati? In questo modo puoi eseguire più di una dichiarazione.

+0

Le schede di script non consentono di visualizzare i risultati di SELECT. –

1

In genere MySQL Query Browser utilizzerà una connessione separata per ogni istruzione eseguita da una scheda di query. Questo include la semantica di commit automatico. Ciò significa che se si imposta un record in una tabella, INSERT, tutti gli altri client connessi allo stesso server potranno vedere il nuovo record una volta terminata l'istruzione.

Se si preme il pulsante "Avvia transazione", questo sarà diverso. Fino a quando non premi i pulsanti "Rollback" o "Commit", tutto ciò che fai nella scheda Query sarà in una singola transazione.

Per provare questo, connettere due client contemporaneamente, almeno uno dei quali è il browser delle query. Nell'altro client fare un SELECT COUNT(*) FROM testtable, supponendo che tale tabella esista.

Ora, nel browser delle query, premere il pulsante "Avvia transazione". Inserire un nuovo record nel testtable. Fare non e premere ancora il pulsante di commit, ma invece, nello stesso browser di query, eseguire lo stesso SELECT COUNT(*) FROM testtable. Verrà visualizzato un valore superiore a quello dell'altro client, poiché questo SELECT è nella stessa transazione dello INSERT che hai appena fatto. Rieseguire lo SELECT nell'altro client e vedere che si ottiene ancora lo stesso valore, poiché non è ancora possibile visualizzare lo INSERT senza commit.

In Query Browser ora premere il pulsante "Conferma" ed eseguire nuovamente il SELECT nell'altro client una terza volta. Ora vedrai anche l'aumento del numero di righe.

Non ho provato a utilizzare le variabili, ma presumo che questo dovrebbe funzionare anche bene.

Spero che questo aiuti!

2

delimitare le query con un punto e virgola come questo:

SELECT @var1 := 17, @var2 := 'somethingelse'; 
SELECT @var1, @var2; 

La query viene evidenziato quando si inserisce un cursore su di esso.

Quindi basta premere Ctrl-Enter per eseguire questa stessa query che si desidera eseguire.

Ogni scheda mantiene la propria sessione, pertanto i valori di @var rimarranno definiti dopo l'esecuzione della prima query. È possibile rieseguire la seconda query tutte le volte che si desidera.

+0

Per chiarire: questo è vero solo se il pulsante di avvio della transazione è stato premuto per primo. Solo allora la seconda istruzione mostrerà i valori assegnati alle variabili! Altrimenti la seconda query restituirà oth come NULL. –

+1

'@Daniel Schneller': No, non è vero. Le variabili sono legate alla sessione, non alle transazioni. Provalo. – Quassnoi

+0

Questo è quello che ho fatto prima di commentare. Vedi qui: http://picasaweb.google.com/lh/photo/ELAIKb0BCCRw1DC1i2TIMQ?feat=directlink e qui: http://picasaweb.google.com/lh/photo/47es8mXWyGNNNUBO8mjg9A?feat=directlink –

0

Non sembra che quello che voglio sia realmente possibile. Sto solo usando due schede: una scheda script per modificare la query e una scheda risultati per chiamarla. Funziona, ma non è così facile come MSSQL Query Analyzer per questo.

Problemi correlati