'Column not allowed' 将游标中的数据添加到 pl/sql 中的 table 时出错

'Column not allowed' error when adding data from cursor to table in pl/sql

我正在做一些练习题来帮助我学习 pl/sql。我需要使用游标将数据从一个 table 添加到另一个。我的代码如下。我已经使用 dbms_output.put_line 来确保游标中有数据,并且游标中的数据通过循环一次一行地进入变量 c_enamec_salary 。问题好像是变量里的数据不能插入top_paid_emptable。我收到 ORA-00984: column not allowed here 错误。我认为这是一个语法错误,但我不明白在哪里。非常感谢任何帮助。

DECLARE
    c_ename VARCHAR2(20);
    c_salary NUMBER(10);
    CURSOR c_topfive IS 
    SELECT ename, salary
    FROM (SELECT ename, salary, 
        RANK() OVER (ORDER BY salary DESC) AS rank
        FROM emp1)
    WHERE rank <= 5;
BEGIN
    OPEN c_topfive;
        LOOP
        FETCH c_topfive INTO c_ename, c_salary;
        dbms_output.put_line(c_ename);
        EXIT WHEN c_topfive%notfound;
        INSERT INTO top_paid_emp (empname, salary) VALUES (c_name,c_salary);
        END LOOP;
    CLOSE c_topfive;
END;

如果您正在提取

FETCH c_topfive INTO c_ename, c_salary;
                     -------

那么你也应该在插入中使用它

INSERT INTO top_paid_emp (empname, salary) VALUES (c_name,c_salary);
                                                   ------

请注意,您可以使用游标 FOR 循环完成它,例如

begin
  for cur_r in (select ename, salary
                from (select ename, salary, 
                             rank() over (order by salary desc) as rank
                      from emp1)
                where rank <= 5) 
  loop
    insert into top_paid_emp (empname, salary) values (cur_r.ename, cur_r.salary);
  end loop;
end;

如您所见,它为您节省了很多工作:您不必声明任何游标变量,打开游标,获取,注意何时退出循环,关闭游标 - Oracle为你做这一切。