2012-12-02 2 views
21

쿼리 용 MySQL 변수를 정의하고 초기화하려고합니다.MySQL 로컬 변수

나는 다음이 : 내가 넷빈즈에서 MySQL을 사용하고

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

그리고 내가 오류를 알려줍니다. 어디서/내 오류가 무엇입니까?

어떻게 해결할 수 있습니까?

답변

31

MySQL이 변수의 두 가지 종류가 있습니다

  • 로컬 변수 (이되지 않은 접두사가인)은 강하게 입력되고 범위가 선언 된 저장된 프로그램 블록으로 범위가 지정됩니다. DECLARE Syntax 아래에 설명 된대로, 그 주 :

    DECLAREBEGIN ... END 복합 명령문 내에서 허용되며 다른 문 전에, 그 시작해야합니다.

  • user variables은 (@ 접두사있는) 느슨한 타입 세션 범위에있다. 그것들은 단지 —을 필요로하지도 않고 선언 할 수도 없다. 당신이 당신의 문제의 문구 당, "로컬 변수를"원하는가 실제로 저장된 프로그램을 정의하고있는 경우

따라서, 당신은 @ 문자를 삭제해야하고 DECLARE 문이에 있는지 확인합니다 프로그램 블록의 시작. 그렇지 않으면 "사용자 변수"를 사용하려면 DECLARE 문을 입력하십시오.

또한, 하위 쿼리로 실행하기 위해 괄호 쿼리를 둘러싸고해야합니다 중 하나 DECLARE Syntax에 따르면

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

이 시도 -

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

아마 [': ='할당 연산자] (http://dev.mysql.com/doc/en/assignment-operators.html#operator_assign-value) = '동등 연산자'(http://dev.mysql.com/doc/en/comparison-operators.html#operator_equal)? – eggyal

+0

그 중요한 업데이 트를 주셔서 감사합니다 @ egyal –

2

기능 예 :

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

이상하게 나에게주는 것입니다. 만약 내가 선택 * 나는 약 100,000 행을 얻을 ... – CodeKingPlusPlus

+0

함수 또는 프로 시저를 만드는거야? – alditis

+0

[하위 쿼리는 항상 괄호 안에 나타나야합니다.] (https://dev.mysql.com/doc/en/subqueries.html) – eggyal

1

:

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

아니면, 당신은 SELECT ... INTO 사용할 수 있습니다 declare은 시작 ... 끝 블록 안에 있어야합니다.