2012-05-02 2 views
1

저는 MS SQL에 익숙해 져서 mySql을 사용하면 저의 속도를 저하시키는 구문 오류가 발생합니다. 나는 다음과 같습니다mysql에서 구문 오류가 발생 했습니까?

declare @expensesSum DOUBLE 
select @expensesSum = sum(expenseAmount) from bondsaverdb.expenses 
insert into bondsaverdb.expenses 
select '6','Extracash',(income - @expensesSum) from bondsaverdb.income where userName ='Dean' 

내가지고있어 오류가 말한다 : 선언 @expensesSum

근처

구문 오류가 나는 변수를 선언하고있어 길이어야합니다 ??

미리 감사드립니다.

+0

: http://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference – dweiss

+0

무엇이 앞에 오는 변수를 선언하지? MS SQL은 필요 없지만 MySQL은 구분 기호'; '가 누락되었을 수 있습니다. 이것이 전체 과정을 게시하십시오. –

+0

호프 U는 "DECLARE는 BEGIN ... END 복합 명령문 내에서만 허용되며 다른 명령문보다 먼저 시작해야합니다"라는 것을 알고있었습니다. " http://dev.mysql.com/doc/refman/5.0/en/declare.html – sree

답변

1

MySQL은 변수를 declare 개까지 요구하거나 허용하지 않으며, 내가 아는 한 모든 변수 (포함 된 변수)를 문자열로 처리하므로 사용자가 직접 입력 할 수 없습니다. 어쨌든,이 작업을해야합니다 :

SET @expensesSum = (SELECT SUM(expenseAmount) FROM bondsaverdb.expenses); 
INSERT INTO 
    bondsaverdb.expenses 
SELECT 
    '6', 'Extracash', (income - @expensesSum) 
FROM 
    bondsaverdb.income 
WHERE 
    userName = 'Dean' 

나는 또한이 자동 증가 ID가의 당신이 전부 INSERT에서 생략 (와 쓰기를 다른 열을 지정)하는 경우는 그 '6'은 ...입니다 모르겠어요 또는 NULL으로 두십시오.

+0

저장 프로 시저 내에서 변수를 선언 할 수 있습니다. –

+0

@AndreasWederbrand 감사합니다. 저장 프로 시저 일 경우 유용 할 수 있습니다. –

1

MySQL은 SQL Server와 매우 다릅니다. 당신이 도움이됩니다 일반적으로

SET @expensesSum = (select @expensesSum = sum(expenseAmount) from bondsaverdb.expenses); 
insert into bondsaverdb.expenses 
select '6','Extracash',(income - @expensesSum) from bondsaverdb.income where userName ='Dean'; 
관련 문제