错误:PL / SQL:忽略SQL语句

时间:2014-07-19 18:51:55

标签: oracle plsql

我尝试将列添加到新表并使用过程更新该列。但我得到了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;

/

2 个答案:

答案 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代码。