2014-02-22 59 views
0

我想在MySQL中建立一个交易过程,我不断收到这是在我的变量声明出现以下语法错误的MySQL语法错误:与声明

ERROR 1064(42000): You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near '; 
DECLARE emp_duplicate INT DEFAULT 0; 
DECLARE old_empnum INT DEFAULT 0; 
DECL' at line 6 

下面是我的程序:

DELIMITER $$ 


DROP PROCEDURE IF EXISTS new_employee$$ 

CREATE PROCEDURE new_employee(in_Fname VARCHAR(15),in_Lname VARCHAR(15), 
in_hire DATE, in_DOB DATE, in_sal Numeric(7,2)) 

BEGIN 

    DECLARE out_message VARCHAR; 
    DECLARE emp_duplicate INT DEFAULT 0; 
    DECLARE old_empnum INT DEFAULT 0; 
    DECLARE out_empnum INT DEFAULT 0; 
    DECLARE time_created DATETIME; 
    DECLARE user_var VARCHAR; 
    DECLARE age_var Int DEFAULT 0; 

    START TRANSACTION; 

    Select MAX(Empno) 
    Into old_empnum 
    From emp; 

    Select COUNT(*) 
    Into emp_duplicate 
    From emp 
    Where (in_Fname=Fname AND in_Lname=Lname AND in_hire=HireDate AND in_DOB=DOB); 

    IF emp_duplicate=0 THEN 
     SET out_message = 'New employee update successful'; 
     SET out_empnum = old_empnum + 1;  
     SET time_created = CURRENT_TIMESTAMP(); 
     SET user_var = USER(); 
     SET age_var = DATEDIFF(CURRENT_DATE,in_DOB); 
     INSERT INTO emp(Empno,Fname,Lname,HireDate,DOB,SAL) 
     VALUES(in_Fname,in_Lname,in_hire,in_DOB,in_sal); 
     INSERT INTO log(Empno,DateCreated,Who) 
     VALUES(out_empnum,time_created,user_var); 
     SELECT out_message; 
     SELECT Empno, Fname, Lname, DATEDIFF(CURRENT_DATE,DOB), HireDate 
     From emp; 
    ELSE 
     SET out_message = 'Employee already exists'; 
     SELECT out_message; 
    END IF; 
    COMMIT; 
END$$ 
DELIMITER ; 

我正在使用cmd和记事本来执行我的代码(以防万一)。对于我的生活,我无法看到我的声明的错误?????

回答

0

你忘了数据类型大小DECLARE out_message VARCHAR (30)DECLARE user_var VARCHAR(30);

DECLARE out_message VARCHAR (30); <------------- here 
DECLARE emp_duplicate INT DEFAULT 0; 
DECLARE old_empnum INT DEFAULT 0; 
DECLARE out_empnum INT DEFAULT 0; 
DECLARE time_created DATETIME; 
DECLARE user_var VARCHAR(30); <------------- here 
DECLARE age_var Int DEFAULT 0; 

在插入语句要为Empno

INSERT INTO emp(Empno,Fname,Lname,HireDate,DOB,SAL) 
     VALUES(in_Fname,in_Lname,in_hire,in_DOB,in_sal); 
0

缺失值,你需要定义VARCHAR大小这样

DECLARE out_message VARCHAR(20); 

试试这个

BEGIN 

    DECLARE out_message VARCHAR(20); // // varchar size here 
    DECLARE emp_duplicate INT DEFAULT 0; 
    DECLARE old_empnum INT DEFAULT 0; 
    DECLARE out_empnum INT DEFAULT 0; 
    DECLARE time_created DATETIME; 
    DECLARE user_var VARCHAR(20); // varchar size here 
    DECLARE age_var Int DEFAULT 0;