2012-12-13 2 views
1

프로 시저 문제 : 업데이트되지 않습니다MySQL을 - 내가 2 개 테이블이있어

CREATE PROCEDURE transfer 
(IN Value_IN float, 
IN When_IN int(4), 
IN AccountTo_IN varchar(26), 
IN AccountFrom_IN varchar(26), 
IN Name_IN varchar(30)) 
NOT DETERMINISTIC 
SQL SECURITY DEFINER 
COMMENT '' 

INSERT INTO deal 
(value, when, AccountTo, AccountFrom, Name) 
VALUES (Value_IN, When_IN, AccountTo_IN, AccountFrom_IN, Name_IN); 

UPDATE account SET Value=(Value+Value_IN) WHERE AccountNumber=AccountTo_IN; 
UPDATE account SET Value=(Value-Value_IN) WHERE AccountNumber=AccountFrom_IN; 

데이터가 '거래'하지만 '계정'테이블에 넣어 : 나는 프로 시저를 설정

`deal` (`value`, `when`, `AccountTo`, `AccountFrom`, `Name`) 

`account` (`AccountNumber`, `Value`) 

편집 : 답변

감사합니다. 나는 당신이 시작해야 할 수 있습니다 생각

CREATE DEFINER=`root`@`localhost` PROCEDURE `transfer`( 
Value_IN FLOAT, 
When_IN DATE, 
AccountTo_IN VARCHAR(26), 
AccountFrom_IN VARCHAR(26), 
Name_IN VARCHAR(30)) 
BEGIN 

    INSERT INTO deal 
    (value, when, AccountTo, AccountFrom, Name) 
    VALUES (value_IN, When_IN, AccountTo_IN, AccountFrom_IN, Name_IN); 

    UPDATE account SET Value = Value+Value_IN) WHERE AccountNumber = AccountTo_IN; 
    UPDATE account SET Value = Value-Value_IN) WHERE AccountNumber = AccountFrom_IN; 

END; 
+0

마지막 두 줄에 백틱 ''으로 둘러싼 계정을 사용해보십시오. SO에서 벗어날 방법을 모르기 때문에 예제가 없습니다. . . – jchapa

+2

'BEGIN'과'END'가'INSERT' 전에 있고 마지막에'UPDATE'가 끝난 후에'BEGIN' /'END'에 대해 –

+0

+1이 필요할 것 같습니다. 어떤 DBMS를 사용하고 있습니까? 저장 프로 시저 구문은 다양합니다. MySQL을 추측하고 있으므로 다음 예제를 살펴 보시기 바랍니다. http://dev.mysql.com/doc/refman/5.0/en/stored-programs-defining.html –

답변

1

하고 INSERT 전 마지막 UPDATE 후 END : 그것은이 방식으로 작동합니다. SQL/Server, MySQL, Sybase, Oracle은 모두 BEGIN/END가 필요합니다.