我想在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;
我的脚本有效吗?如果没有,还有其他方法可以实现吗?由于光标中很少有值,而另一个表中很少有值,我不知道如何处理,请帮助我。
答案 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 );