MySQL 存储过程出现游标错误

标签 mysql sql stored-procedures

我正在尝试编写一个 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/

相关文章:

mysql - 如何重新排列表以获取 Mysql 中现有组合的列表?

php - SQL - 选择用户名 WHERE 角色 = $string

postgresql - 在 Symfony2 和 PostgreSQL 中调用存储过程?

c# - 我可以从使用 Linq to sql 的过程中接收返回值和结果集吗?

mysql - 在程序中授予权限

mysql - 计算两个日期之间的可用房间数量

mysql - 简单的MySQL数据库结构问题

mysql - 如何优化具有多个结果的 MySQL/MyISAM 全文搜索

mysql - 整数值超出范围

SQL Server,将具有多行html代码的文本解析为表格