首页 > 解决方案 > ORA-00947: 值不足

问题描述

伙计们,我在运行我的代码时收到错误消息,即 PL/SQL: ORA-00947: no enough values。

declare
    type e_type is record ( last_name employees.last_name%type,
                             email employees.email%type,
                             hire_date employees.hire_date%type,
                             job_id employees.job_id%type);
      type e_list is table of e_type index by pls_integer;
      emps e_list;
    begin
      for x in 100 .. 110 loop
        select last_name,email,hire_date,job_id into emps(x) from employees 
           where employee_id = x ;
           ---dbms_output.put_line(emps(x).email);
           insert into emp(last_name,email,hire_date,job_id) values emps(x);
      end loop;
    end;

标签: oracleplsql

解决方案


@WilliamRobertson 提出了一个有趣的解决方案(我实际上已经忘记了这种格式)。然而,仍然有一个更简单的解决方案。那就是对 select 和 insert 使用单个 sql 语句,同时完全避免类型和变量声明以及循环:

insert into emp(last_name,email,hire_date,job_id) 
  select last_name,email,hire_date,job_id
    from employees  
   where employee_id between 100 and 110; 

推荐阅读