我尝试将列添加到新表并使用过程更新该列。但我得到了2个错误。
错误:PL / SQL:忽略SQL语句。错误:PL / SQL:ORA-00947:不是 足够的值
不知道如何找出它们。请帮帮我!!
ALTER TABLE emp1
ADD Bonus integer;
set serveroutput on
CREATE OR REPLACE Procedure proc2_update
AS
BEGIN
dbms_output.put_line('Truncate Table emp1');
execute immediate 'truncate table emp1';
dbms_output.put_line('Truncated Table emp1 successfully');
dbms_output.put_line('Insert into Table emp1');
insert into emp1 select * from emp;
dbms_output.put_line('Inserted into Table emp1 successfully');
dbms_output.put_line('Update Table emp1');
if Deptno= 10 then
update emp1 set Bonus = sal * 10/100;
Elsif Deptno= 20 then
update emp1 set Bonus = sal * 20/100;
elsif Deptno= 30 then
update emp1 set Bonus = sal * 30/100;
else
update emp1 set Bonus = sal * 40/100;
end if;
END proc2_update;
/
答案 0 :(得分:0)
问题很可能在这一行:
insert into emp1 select * from emp;
它告诉您,并非emp1
的所有列都与emp
的列匹配。
显式提供所有字段或更新表以使其列匹配。
我认为你的程序应该是这样的:
CREATE OR REPLACE Procedure proc2_update
AS
BEGIN
dbms_output.put_line('Truncate Table emp1');
execute immediate 'truncate table emp1';
dbms_output.put_line('Truncated Table emp1 successfully');
--
dbms_output.put_line('Insert into Table emp1');
insert into emp1
( col1 -- replace with real column names
, col2
)
select col1
, col2
from emp
;
dbms_output.put_line('Inserted into Table emp1 successfully');
--
dbms_output.put_line('Update Table emp1');
update emp1 set Bonus = sal * 10/100 where deptno = 10;
update emp1 set Bonus = sal * 20/100 where deptno = 20;
update emp1 set Bonus = sal * 30/100 where deptno = 30;
update emp1 set Bonus = sal * 40/100 where deptno not in ( 10, 20, 30 );
END proc2_update;
答案 1 :(得分:-1)
我同意,最有可能的是插入行中的行为。 如果没有明确的emp1列列表和emp的星号,则不应使用此表单。 改变emp1或emp可能会破坏很多PL / SQL代码。