2014-11-03 3 views
0

Я хочу написать sql-скрипт с запросом на вставку в Oracle, где одно из значений будет извлекаться из курсора, а остальные будут извлекаться из таблицы.Вставить в select query с значением курсора

Для 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; 

Действительно ли мой сценарий действителен? Если нет, есть ли другой способ его достижения? Поскольку несколько значений находятся в курсоре, а некоторые из них находятся в другой таблице, я не уверен, как с этим справиться, пожалуйста, помогите мне.

ответ

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 вставки: (если вы можете выбрать SQL над PL/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);