12

Kayıtlı yordamı oluşturduğumda, biraz değişken oluşturabilir miyim? örneğin:Değişken sonucunu, sorgudan ayarlayın

CREATE PROCEDURE `some_proc`() 
BEGIN 

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

SORU:

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

: ama nasıl bunu nasıl böyle bazı yapmaktır, sorgudan değişken sonucunu ayarlamak için?

+0

Bakın, sorunuz kopyalanabilir. http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 – bodi0

+1

Hayır, gerçekten bir kopya değil. Http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 konusu "kullanıcı tanımlı değişkenler" dir. Bu soru saklı yordam yerel değişkenler hakkındadır. Cevabımdaki sözdizimi, kullanıcı tanımlı değişkenler için de çalışır, ancak diğer şekilde değil. –

cevap

33

Bunu yapmanın çeşitli yolları vardır.

Bir alt sorgu kullanabilirsiniz

:

SELECT COUNT(*), MAX(col) 
INTO some_var, some_other_var 
FROM tab; 
: Birden çok değer atamak için
SET some_var = (SELECT COUNT(*) FROM mytable); 

(sizin orijinali gibi sadece sorguda etrafında parantez ekleyin)

veya SELECT INTO sözdizimini kullanın

Alt sorgu sözdizimi biraz daha hızlıdır (nedenini bilmiyorum), ancak yalnızca tek bir değer atamaya çalışır. Sözdizimine seç, birden çok değeri bir kerede ayarlamanıza izin verir, böylece sorgudan birden çok değer almanız gerekiyorsa, her bir değişken için sorguyu tekrar tekrar yürütmek yerine bunu yapmanız gerekir.

Son olarak, sorgunuz tek bir satır değil bir sonuç kümesi döndürürse, cursor'u kullanabilirsiniz.

+0

Hatalısınız. –

+0

Roland Bouman, çok teşekkürler, ikinci varyant çalışıyor, ama önce değil, parantez yardımcı değil. :) –

+0

No. ikisi de çalışıyor. Bir sözdizimi hatası yapmış olmanız gerekir. mysql> sınırlayıcı // mysql> işlev yarat f() -> int döndürür -> başlangıç ​​ -> declare v int; -> set v = (çiftden sayımı (*) seç); -> return v; -> end; -> // Sorgu tamam, 0 satır etkilendi (0,05 saniye) mysql> f() seçin; -> // + ------ + | f() | + ------ + | 1 | + ------ + 1 satırlık küme (0,00 sn) mysql> sürümü seç(); -> // + ----------- + | version() | + ----------- + | 5.5.20 | + ----------- + 1 satırda set (0.00 sn) –

3

Aşağıdaki select ifadesi sonucu sayımdan (*) kaydetmenize izin vermelisiniz.

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

MySQL, INTO yan tümcesini, ifadenin sonunda sonuncu madde olarak ayarlamanıza olanak tanır. Ancak, standart SQL'de SELECT ve FROM deyimi arasında görünür. –

+0

juergen d, çok teşekkürler. :) –