12

Kiedy mogę utworzyć zapisaną procedurę, mogę utworzyć zmienną tak? na przykład:Ustaw wynik zmiennej, z zapytania

CREATE PROCEDURE `some_proc`() 
BEGIN 

    DECLARE some_var INT; 
    SET some_var = 3; 
.... 

PYTANIE: ale jak ustawić zmienną wynik z zapytania, czyli jak zrobić niektóre tak:

DECLARE some_var INT; 
SET some_var = SELECT COUNT(*) FROM mytable ; 

?

+0

Zobacz tutaj, twoje pytanie jest możliwe duplikat. http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 – bodi0

+1

Nie, niezupełnie duplikat. Tematem http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 są "zmienne zdefiniowane przez użytkownika". To pytanie dotyczy zmiennych lokalnych procedury składowanej. Składnia w mojej odpowiedzi działa również dla zmiennych zdefiniowanych przez użytkownika, ale nie na odwrót. –

Odpowiedz

33

Istnieje wiele sposobów, aby to zrobić.

Można użyć podzapytania:

SET some_var = (SELECT COUNT(*) FROM mytable); 

(jak oryginału, wystarczy dodać nawias po zapytaniu)

lub użyj składni SELECT INTO przypisać wiele wartości:

SELECT COUNT(*), MAX(col) 
INTO some_var, some_other_var 
FROM tab; 

Składnia podkwerendy jest nieco szybsza (nie wiem dlaczego), ale działa tylko w celu przypisania pojedynczej wartości. Wybór w składnię umożliwia ustawienie wielu wartości naraz, więc jeśli chcesz pobrać wiele wartości z zapytania, powinieneś to zrobić zamiast wykonywać zapytanie wielokrotnie dla każdej zmiennej.

Wreszcie, jeśli zapytanie nie zwraca pojedynczego wiersza, ale zestaw wyników, można użyć wartości cursor.

+0

Mylisz się. –

+0

Roland Bouman, bardzo dziękuję, twój drugi wariant działa, ale najpierw nie, nawias nie pomoże. :) –

+0

Nie. Obie prace. Musiałeś popełnić błąd składni. mysql> delimiter // mysql> create function f() -> zwraca int -> rozpocznij -> declare v int; -> set v = (wybierz liczbę (*) z podwójnego); -> return v; -> koniec; -> // Zapytanie OK, dotknięte 0 wierszy (0,05 s) mysql> select f(); -> // + ------ + | f() | + ------ + | 1 | + ------ + 1 wiersz w zestawie (0,00 s) mysql> wybierz wersję(); -> // + ----------- + | wersja() | + ----------- + | 5.5.20 | + ----------- + 1 wiersz w zestawie (0.00 sec) –

3

Poniższa instrukcja wyboru powinna umożliwić zapisanie wyniku zliczenia (*).

SELECT COUNT(*) FROM mytable INTO some_var; 
+2

MySQL umożliwia ustawienie klauzuli INTO jako ostatniej klauzuli na końcu instrukcji. Jednak w standardowym SQL pojawia się pomiędzy klauzulami SELECT i FROM. –

+0

juergen d, wielkie dzięki. :) –

Powiązane problemy