2012-12-02 33 views
21

Bir sorgu için MySQL değişkenini tanımlamaya ve başlatmaya çalışıyorum.MySQL yerel değişkenler

Ben şu var: Ben NetBeans MySQL kullanıyorum

declare @countTotal int; 
SET @countTotal = select COUNT(*) 
from nGrams; 

ve bir hata olduğunu söylüyor. Benim hatam nerede/nerede?

Bunu nasıl düzeltebilirim?

cevap

31

MySQL değişkenin iki farklı türü vardır:

  • yerel değişkenler ( hangilerinintarafından önekli) güçlü bir şekilde yazılmıştır ve bildirildikleri depolanmış program bloğu kapsamına alınmıştır. DECLARE Syntax altında belgelendiği gibi, dikkat edin:

    DECLARE sadece BEGIN ... END bileşik ifadesi içinde izin verilir ve diğer tabloların önce, onun başında olmalıdır.

  • user variables (@ tarafından öneki olan) gevşek daktilo ve oturuma kapsamına eklenir. Ne ihtiyaçları ne de — ilan edilmesi gerektiğini unutmayın. Eğer söz konusu ifadeler başına, "yerel değişkeni" istiyorsun aslında saklı bir programı tanımlayan ve eğer

nedenle, @ karakteri düşmesi gerekir ve DECLARE beyanı de olmasını sağlayacaktır Program bloğunuzun başlangıcı. Aksi takdirde, bir "kullanıcı değişkeni" kullanmak için DECLARE ifadesini bırakın.

Ayrıca, bir alt sorgu olarak çalıştırmak amacıyla parantez içinde Sorgunuzla çevreleyen gerekecek ya: DECLARE Syntax göre

SELECT COUNT(*) INTO @countTotal FROM nGrams; 
5

bu deneyin: -

select @countTotal := COUNT(*) from nGrams; 
+0

Muhtemelen [': =' atama operatörü] (http://dev.mysql.com/doc/en/assignment-operators.html#operator_assign-value) yerine ['] = 'eşitlik operatörü] (http://dev.mysql.com/doc/en/comparison-operators.html#operator_equal)? – eggyal

+0

Bu önemli güncelleme için teşekkürler @eggyal –

2

Fonksiyon örnek:

DROP FUNCTION IF EXISTS test; 

DELIMITER $$ 
CREATE FUNCTION test(in_number INT) RETURNS INT 
    BEGIN 
     DECLARE countTotal INT; 
     SET countTotal = SELECT COUNT(*) FROM nGrams; 
    RETURN countTotal + in_number; 
END $$ 
DELIMITER ; 
+0

garip bir şekilde bana 0 veriyor. Bir seçim yaparsam * 100.000 satır alırım ... – CodeKingPlusPlus

+0

Bir işlev veya yordam mı yapıyorsunuz? – alditis

+0

[Bir alt sorgu her zaman parantez içinde görünmelidir.] (Https://dev.mysql.com/doc/en/subqueries.html) – eggyal

1

:

SET @countTotal = (SELECT COUNT(*) FROM nGrams); 

Yoksa, SELECT ... INTO kullanabilirsiniz declare, başlangıç ​​... sonu bloğunda olmalıdır.