首页 > 解决方案 > 我的 fetch into 语句中的变量数的 Cursorfetch 错误

问题描述

不确定我的代码有什么问题。在过去的 3 个小时里一直在查看这个,一切似乎都是正确的,但是在尝试执行该过程时我收到了这个 cursorfetch 错误。 Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.

在文本编辑器中,它还Sum_Salary在 case 语句中用红色强调了我的所有变量。

同样,所有这些对我来说似乎都是正确的,我无法找出我的代码中的问题。

create procedure SP_Report_NEW_Budget
as 
begin
if exists (select * from VDept_Budget)
    create table NEW_Dept_Budget 
    (
        Dept_No         int,
        Dept_Name       varchar(30),
        COUNT_Emp       int,
        New_SUM_Salary  int,
        New_AVE_Salary  int
    )

    declare @depNumber  int,
            @depName    varchar(30),
            @empCount   int,
            @sumSalary  int,
            @aveSalary  int;
    declare tableCursor cursor for
    select Dept_Name, Dept_Number, No_Emp, Sum_Salary, Ave_Salary, 
        case
            when Dept_Number = 1 then (Sum_Salary + (Sum_Salary * 0.1))
            when Dept_Number = 4 then (Sum_Salary + (Sum_Salary * 0.2))
            when Dept_Number = 5 then (Sum_Salary + (Sum_Salary * 0.3))
            when Dept_Number = 7 then (Sum_Salary + (Sum_Salary * 0.4))
        end as New_SumSalary,
        case
            when Dept_Number = 1 then (Sum_Salary + (Sum_Salary * 0.1)) / No_Emp
            when Dept_Number = 4 then (Sum_Salary + (Sum_Salary * 0.2)) / No_Emp
            when Dept_Number = 5 then (Sum_Salary + (Sum_Salary * 0.3)) / No_Emp
            when Dept_Number = 7 then (Sum_Salary + (Sum_Salary * 0.4)) / No_Emp
        end as New_AveSalary

        from VDept_Budget

    open tableCursor

    begin
        fetch next from tableCursor into @depNumber, @depName, @empCount, @sumSalary, @aveSalary

    begin 
        insert into NEW_Dept_Budget values(@depNumber, @depName, @empCount, @sumSalary, @aveSalary)
        fetch next from tableCursor into @depNumber, @depName, @empCount, @sumSalary, @aveSalary

    end
    end
    close tableCursor

    select*from NEW_Dept_Budget

end

标签: mysqlsql

解决方案


由于我不太了解您的数据,因此我猜测该问题可能是您的案例陈述中未处理的案例。看起来您的部门是数字并跳过 2、3 和 6。如果您与这些部门中的任何一个有任何关系,那么您的 case 语句看起来将无法处理它,从而导致您的 insert 语句出现问题。

此外,为了简单起见,如果您将 case 语句更新为(纯粹是一个建议),您可以使您的代码更易于阅读:

when Dept_Number = 1 then (Sum_Salary * 1.1) / No_Emp when Dept_Number = 4 then (Sum_Salary * 1.2) / No_Emp


推荐阅读