使用光标值插入选择查询

时间:2014-11-03 18:57:16

标签: oracle plsql

我想在Oracle中编写一个带有insert查询的sql脚本,其中一个值将从游标中获取,其余的将从表中检索。

对于Eg:考虑员工表,

Emp_No | Emp_Name

  1    |  AAA
  ...........

我正在将表格读入光标。

Cursor c1 is select emp_no, emp_name from employee;

我正在迭代光标并添加到表中以及来自另一个表的信息。

for empCur in c1
loop

insert into employee_info(emp_no, emp_name, address, age, ... ) values (empCur.emp_no, empCur.emp_name, select t.address, t.age, ... from employee_temp_table t where t.emp_no=empCur.emp_no)

end loop;

我的脚本有效吗?如果没有,还有其他方法可以实现吗?由于光标中很少有值,而另一个表中很少有值,我不知道如何处理,请帮助我。

2 个答案:

答案 0 :(得分:1)

您的脚本不正确,因为

select t.address, t.age, ... from employee_temp_table t where t.emp_no=empCur.emp_no

不是有效的表达式。您可以仅使用标量子查询(单行,单列子查询),如下所示:

insert into t1(col1, col2, col3) values (1, (select col1 from t2), (select col2 from t2));

或者您可以尝试从选择中插入:

for empCur in c1 loop
  insert into employee_info(emp_no, emp_name, address, age, ... ) 
  select empCur.emp_no, empCur.emp_name, t.address, t.age, ... from employee_temp_table t where t.emp_no=empCur.emp_no;
end loop;

答案 1 :(得分:1)

如果你想使用光标,为什么不加入光标内的表?

for empCur in ( select e.emp_no, e.emp_name, t.address, t.age ...
from employee e join employee_temp_table t on ( t.emp_no = e.emp_no )
) loop
insert into employee_info(...) values ( empCur.emp_no, ...);
end loop;

或者使用sql insert :(如果你可以选择sql而不是pl / sql - T Kyte说这样做)

insert into employee_info
select e.emp_no, e.emp_name, t.address, t.age ...
from employee e join employee_temp_table t on ( t.emp_no = e.emp_no );