Chciałbym WYBRAĆ pojedynczą wartość w zmiennej. Próbowałem śledzić:
DECLARE myvar INT(4);
- natychmiast zwraca błąd składni.
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
- zwraca jedną liczbę całkowitą
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
- nie działa, wypróbowałem również @myvar
Czy można używać DECLARE poza procedurami składowanymi lub funkcjami?
Może po prostu nie rozumiem pojęcia zmiennych użytkownika ... po prostu próbowałem:
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
... który działał tak, jak powinien. Ale jeśli uruchomię każde zapytanie na raz, po prostu otrzymam @var NULL.
źródło
:=
zostanie wycofane. Więc wolisz używaćSELECT ... INTO
!Ostatecznie procedura składowana była rozwiązaniem mojego problemu. Oto, co pomogło:
DELIMITER // CREATE PROCEDURE test () BEGIN DECLARE myvar DOUBLE; SELECT somevalue INTO myvar FROM mytable WHERE uid=1; SELECT myvar; END // DELIMITER ; call test ();
źródło
Te odpowiedzi nie obejmują zbyt dobrze MULTIPLE zmiennych.
Wykonanie przypisania w linii w procedurze składowanej powoduje, że wyniki te są RÓWNIEŻ wysyłane z powrotem w zestawie wyników. To może być mylące. Aby użyć składni SELECT ... INTO z wieloma zmiennymi, należy:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
SELECT musi zwracać tylko 1 wiersz, stąd LIMIT 1, chociaż nie zawsze jest to konieczne.
źródło
Możesz także użyć SET zamiast DECLARE
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1); SELECT myvar;
źródło
Zgodnie z dokumentacją MySQL DECLARE działa tylko na początku bloku BEGIN ... END, tak jak w zapisanym programie.
źródło
syntax error, missing ;
błędu.Nie musisz DEKLAROWAĆ zmiennej w MySQL. Typ zmiennej jest określany automatycznie, gdy po raz pierwszy zostanie przypisana jej wartość. Jego typem może być: liczba całkowita, dziesiętna, zmiennoprzecinkowa, ciąg binarny lub niebinarny lub wartość NULL. Aby uzyskać więcej informacji, zobacz dokumentację zmiennych definiowanych przez użytkownika:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
Możesz użyć polecenia SELECT ... INTO, aby przypisać kolumny do zmiennej:
http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html
Przykład:
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)
źródło
Warto zauważyć, że pomimo tego, że można
SELECT INTO
zmienne globalne, takie jak:SELECT ... INTO @XYZ ...
NIE możesz używać
FETCH INTO
zmiennych globalnych, takich jak:FETCH ... INTO @XYZ
Wygląda na to, że to nie jest błąd . Mam nadzieję, że komuś to pomoże ...
źródło
Używam wersji 6 (MySQL Workbench Community (GPL) dla systemu Windows w wersji 6.0.9, wersja 11421, kompilacja 1170) w systemie Windows Vista. Nie mam problemu z następującymi opcjami. Prawdopodobnie naprawili to, ponieważ ci goście mieli problemy trzy lata temu.
/* 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';
Wszystkie powyższe opcje dają mi poprawny wynik.
źródło
Dla tych, którzy mają teraz takie problemy, po prostu spróbuj umieścić alias dla tabeli, to powinno wystarczyć, np:
SELECT myvalue INTO myvar FROM mytable x WHERE x.anothervalue = 1;
U mnie to zadziałało.
Twoje zdrowie.
źródło
Być może przegapisz symbol @ przed wartością, w ten sposób
select 'test' INTO @myValue
;źródło
SELECT c1, c2, c3, ... INTO @ v1, @ v2, @ v3, ... FROM nazwa_tabeli WHERE warunek;
źródło