-2

このコードは私には機能していません。私にメッセージを送ってメッセージを送信してください

ORA-01422       exact fetch returns more than requested number of rows  

コード:

declare  
  a_id employees.employee_id%type;  
  b_name employees.first_name%type;  
  c_salary employees.salary%type;  
begin  
  for i in 1..10 loop  
    select employee_id, first_name, salary into a_id, b_name, c_salary from employees 
    where employee_id='a_id', first_name='b_name', salary='c_salary';  

    insert into awais(employee_id, first_name, salary) values (a_id, b_name, c_salary);  
  end loop;  
end;  
/
4

2 に答える 2

2

に複数の行を選択していることが問題のようですa_id, b_name, c_salary

直接使用することもできますinsert select

INSERT INTO awais
SELECT employee_id, first_name, salary into a_id, b_name, c_salary
  FROM employees 
 WHERE employee_id='a_id' 
   AND first_name='b_name' 
    AND salary='c_salary';

または、カーソル for ループを使用できます。

declare  
  CURSOR c1
    IS
      select employee_id  a_id
           , first_name   b_name
           , salary       c_salary
        from employees 
       where employee_id='a_id' 
         AND first_name='b_name' 
         AND salary='c_salary'; 
begin  
  for i in 1..10 loop  
    for l_record in c1
    loop
      insert into awais(employee_id, first_name, salary) 
      values (l_record.a_id, l_record.b_name, l_record.c_salary); 
    end loop;


  end loop;  
end;  
/
于 2013-09-29T13:55:17.423 に答える
0

IIUC、もっと簡単なアプローチを取ることができます:

INSERT INTO awais
(SELECT employee_id, first_name, salary into a_id, b_name, c_salary
 FROM   employees 
 WHERE employee_id='a_id' AND first_name='b_name' AND salary='c_salary');
于 2013-09-29T13:42:54.660 に答える