Domanda

I'd desidera selezionare un singolo valore in una variabile. I'd cercato di seguito:

DECLARE myvar INT(4);

-. Ritorna immediatamente qualche errore di sintassi

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

- restituisce un singolo intero

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

- non funziona, anche provato @myvar

E 'possibile utilizzare DECLARE al di fuori della stored procedure o funzioni?

Forse ho semplicemente non ottengo il concetto di variabili utente ... Ho appena provato:

SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;

... che ha lavorato proprio come E'dovuto. Ma se corro ogni query alla volta ottengo solo NULL @var.

È stato utile?

Soluzione 2

Alla fine di una stored procedure è stata la soluzione per il mio problema. Here's ciò che ha contribuito:

DELIMITER //
CREATE PROCEDURE test ()
  BEGIN
  DECLARE myvar DOUBLE;
  SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
  SELECT myvar;
  END
  //

DELIMITER ;

call test ();

Altri suggerimenti

mi sono imbattuto in questo stesso problema, ma credo di sapere che cosa sta causando la confusione. Se si utilizza MySQL Query Analyzer, è possibile farlo bene:

SELECT myvalue 
INTO @myvar 
FROM mytable 
WHERE anothervalue = 1;

Tuttavia, se si mette la stessa query in MySQL Workbench, getterà un errore di sintassi. Non so il motivo per cui sarebbero diverse, ma sono. Per aggirare il problema in MySQL Workbench, è possibile riscrivere la query in questo modo:

SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;

Queste risposte non coprono molto bene più variabili.

Fare l'assegnazione inline in una stored procedure provoca tale risultato anche essere inviati indietro nel set di risultati. Che può essere fonte di confusione. Per usare la sintassi SELECT ... INTO con più variabili che fate:

SELECT a, b INTO @a, @b FROM mytable LIMIT 1;

Il SELECT deve restituire solo 1 fila, quindi LIMIT 1, anche se non è sempre necessaria.

È inoltre possibile utilizzare SET al posto di DECLARE

SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);

SELECT myvar;

la documentazione MySQL DECLARE funziona solo all'inizio di un blocco BEGIN ... END come in un programma memorizzato.

Non è necessario dichiarare una variabile in MySQL. Il tipo di una variabile viene determinata automaticamente quando viene assegnato prima un valore. Il suo tipo può essere: intero, decimale, virgola mobile, stringa binaria o non binari, o il valore NULL. Vedere la documentazione Variabili definite dall'utente per ulteriori informazioni:

http://dev.mysql.com/doc/ refman / 5.0 / it / user-variables.html

È possibile utilizzare SELECT ... INTO per colonne assegnare ad una variabile:

http://dev.mysql.com/ doc / refman / 5.0 / it / select-in-statement.html

Esempio:

mysql> SELECT 1 INTO @var;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT @var;
+------+
| @var |
+------+
| 1    |
+------+
1 row in set (0.00 sec)

Vale la pena notare che, nonostante il fatto che si può SELECT INTO le variabili globali come:

SELECT ... INTO @XYZ ...

Puoi non le variabili globali uso FETCH INTO come:

FETCH ... INTO @XYZ

appare come non è un bug . Spero che sarà utile a qualcuno ...

Sto usando la versione 6 (MySQL Workbench Community (GPL) per la versione di Windows 6.0.9 revisione 11421 costruzione 1170) in Windows Vista. Non ho alcun problema con le seguenti opzioni. Probabilmente è stato risolto dal momento che questi ragazzi hanno i problemi di tre anni fa.

/* first option */
SELECT ID 
INTO @myvar 
FROM party 
WHERE Type = 'individual';

-- get the result
select @myvar;

/* second option */
SELECT @myvar:=ID
FROM party
WHERE Type = 'individual';


/* third option. The same as SQL Server does */
SELECT @myvar = ID FROM party WHERE Type = 'individual';

Tutti opzione sopra di me danno un risultato corretto.

È forse manca il simbolo @ prima del vostro valore, come quello select 'test' INTO @myValue;

Per quelli in esecuzione in tali questioni in questo momento, solo cercare di mettere un alias per la tabella, questo dovrebbe il trucco, per esempio:

SELECT myvalue 
  INTO myvar 
  FROM mytable x
 WHERE x.anothervalue = 1;

Ha funzionato per me.

Saluti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top