2014-11-03 18 views
0

我想寫一個sql腳本,在Oracle中插入查詢,其中一個值將從光標中獲取,其餘所有將從表中檢索。用光標值插入到select查詢中

對於例如:考慮Employee表,

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; 

我的腳本是否有效?如果沒有其他方法來實現它?由於很少有值在遊標中,而且很少有值在另一個表中,所以我不確定如何處理這些值,請幫助我。

回答

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

如果你想使用遊標,爲什麼不只是加入光標內的表?

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:(如果你可以選擇在PL/SQL SQL - T的凱特說,這樣做)

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);