我正在尝试编写一个 MySQL 存储过程,该过程 (1) 将值插入到 Employee 表中,(2) 获取新员工的部门编号,扫描 Project 表以查找该部门从事的任何项目,以及 (3) 插入这些项目与员工的 SSN 一起放入 Works_On 表中。
我尝试使用光标执行此操作,但不断遇到我无法弄清楚的语法错误。当前错误发生在我声明光标时,但我不知道如何修复它。我已经尝试了很多事情,希望有人能够看到这个错误。
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 ;
最佳答案
我们根据我的要求取消删除了您的问题,这样您就不会在外面感到困惑。您的代码有几个语法错误。有些只是编造的 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
.
关于MySQL 存储过程出现游标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630176/