2016-09-22 129 views
0

我正在尝试编写一个MySQL存储过程,该过程将(1)将值插入到Employee表中并(2)接收新员工的部门编号,扫描部门工作的任何项目的Project表on和(3)将这些项目与雇员的SSN一起插入到Works_On表中。MySQL存储过程与光标错误

我正试图用游标来做到这一点,但仍然遇到我无法弄清楚的语法错误。当前的错误是在我声明游标的地方,但我不知道如何解决它。我已经尝试了很多东西,希望有人能够看到这个错误。

Use Company 
DELIMITER // 

Create Procedure SP_Insert_NewEmployee 
(
    IN fname varchar(30), 
    IN minit char(1), 
    IN lname varchar(30), 
    IN ssn char(9), 
    IN bdate date, 
    IN address varchar(50), 
    IN sex char(1), 
    IN salary decimal(10,1), 
    IN super_ssn char(9), 
    IN dno int 
) 
Begin 
Declare projectNumber Integer; 
Declare myCursor2 = CURSOR FOR 
    SELECT Pnumber 
    FROM PROJECT 
    Where Dnum = @dno; 

#Insert into Employee 
Insert into EMPLOYEE 
    (
     Fname, 
     Minit , 
     Lname , 
     Ssn , 
     Bdate , 
     Address , 
     Sex, 
     Salary , 
     Super_ssn, 
     Dno 
    ) 
Values 
    (
     $fname , 
     $minit , 
     $lname, 
     $ssn , 
     $bdate , 
     $address , 
     $sex , 
     $salary , 
     $super_ssn , 
     $dno 
    ); 
    END 

#Find projects by new employee's dept 




OPEN myCursor2; 

FETCH NEXT 
    FROM myCursor2 
    INTO 
     projectNumber 


WHILE @@FETCH_STATUS = 0 

BEGIN 
Insert Into WORKS_ON 
Values 
    (
     ssn, 
     projectNumber, 
     0 
    ) 

FETCH NEXT 
FROM myCursor2 
    INTO 
     projectNumber 
END 

CLOSE myCursor2; 
DEALLOCATE myCursor2; 
END 
END 
// 
DELIMITER ; 
+0

错误代码是1064 .....在游标附近 – cisstudent123

+0

更好的是添加注释而不是回答,首先你必须声明游标为'DECLARE cur_saving_acc CURSOR FOR',代码搞砸了,所以不知道其他问题不存在 – Susang

+0

这是第一个问题....我混合了MySQL和SQL Server游标语法。谢谢! – cisstudent123

回答

2

我们根据我的要求取消了您的问题,所以您不会在那里混淆。你的代码有几个语法错误。有些人只是编造了sql,其他人却错过了逗号和错误的美元符号。希望这有助于。

USE Company; 
DROP PROCEDURE IF EXISTS SP_Insert_NewEmployee; 
DELIMITER // 
CREATE PROCEDURE SP_Insert_NewEmployee 
(
    IN fname varchar(30), 
    IN minit char(1), 
    IN lname varchar(30), 
    IN ssn char(9), 
    IN bdate date, 
    IN address varchar(50), 
    IN sex char(1), 
    IN salary decimal(10,1), 
    IN super_ssn char(9), 
    IN dno int 
) 
Begin 
DECLARE done INT DEFAULT FALSE; 
Declare projectNumber Integer; 
Declare myCursor2 CURSOR FOR SELECT Pnumber FROM PROJECT Where Dnum = dno; 

#Insert into Employee 
Insert into EMPLOYEE 
    ( Fname, 
     Minit , 
     Lname , 
     Ssn , 
     Bdate , 
     Address , 
     Sex, 
     Salary , 
     Super_ssn, 
     Dno 
    ) 
Values 
    ( fname , 
     minit , 
     lname, 
     ssn , 
     bdate , 
     address , 
     sex , 
     salary , 
     super_ssn , 
     dno 
    ); 

#Find projects by new employee's dept 

OPEN myCursor2; 

do_something: LOOP 
    FETCH myCursor2 INTO projectNumber; 
    IF done THEN 
     LEAVE do_something; 
    END IF; 
    Insert Into WORKS_ON Values (ssn,projectNumber,0); 
END LOOP; 

CLOSE myCursor2; 

END // 
DELIMITER ; 

请仔细阅读手册页:CURSORS