我写了一个PLSQL存储过程,编译时报PL/SQL: ORA-00947: 没有足够的值,问题有点奇怪。

完整代码如下,没什么实际意义,只是练习,别给我说怎么做更好,我只是想每50条commit一次。
具体代码如下:
create or replace procedure piciCommit as
v_count number;
v_num number;
BEGIN
v_count:=0;
v_num:=1;

--for cur in (select * from emp) loop --如果使用这两行,就能正常编译,正常运行。
--insert into emp1 values cur;
--*********用下面的这两行编译时就会报没有足够的值错误,但是列数也相同啊,emp1表结构和emp表完全一样,所有列都允许为空,允许重复。
for cur in (select empno,ename,job,sal,deptno from emp) loop
insert into emp1(empno,ename,job,sal,deptno) values cur;
--*****************
v_count:=v_count+1;
dbms_output.put_line('第'||v_count||'条');
if v_count>=50 then
dbms_output.put_line('---------------------------------第'||v_num||'次commit---------------------------------');
v_num:=v_num+1;
commit;
v_count:=0;
end if;
end loop;
dbms_output.put_line('---------------------------------第'||v_num||'次commit---------------------------------');
commit;
end;
还请大神指点

insert into emp1(empno,ename,job,sal,deptno) values cur;
这行代码,这样写试一下,看看是否好用。
insert into emp1(empno,ename,job,sal,deptno) values (cur.empno,cur.ename,cur.job,cur.sal,cur.deptno);追问

嗯,这样可以,必须要这样吗?
我好像知道了,他报的是values里面的值的数量和要插入的列的数量不一致,不是两张表的列数量不一致。

追答

主要是在名表那个地方明确写了要插入的列,那么在值的地方就得对应写出相应个数的值。

温馨提示:答案为网友推荐,仅供参考