Во-первых, я предполагаю, что, поскольку вы принимаете коллекцию, вы намерены перебирать каждый элемент в коллекции.В вашем коде нет цикла, который я предполагаю, что вы намеревались иметь.Во-вторых, я предполагаю, что коллекция плотная (то есть нет индексов, которые не заполнены)
Вы, вероятно, хотите что-то вроде
FOR i IN 1 .. p_emp_details_in.count
LOOP
IF p_emp_details_in(i).employee_id IS NOT NULL
THEN
INSERT into emp (employee_id, address)
values(p_emp_details_in(i).employee_id, p_emp_details_in(i).address_id);
END IF;
IF p_emp_details_in(i).manager_id IS NOT NULL
THEN
INSERT into manager (manager_id, address)
values(p_emp_details_in(i).manager_id,p_emp_details_in(i).address_id);
END IF;
END LOOP;
Конечно, если вам не нужно использоватьPL / SQL, вы можете сделать это с помощью одного INSERT ALL
INSERT ALL
WHEN employee_id IS NOT NULL
INTO emp(employee_id, address) VALUES( employee_id, address )
WHEN manager_id IS NOT NULL
INTO manager( manager_id, address ) VALUES( manager_id, address )
SELECT employee_id, manager_id, address
FROM TABLE( p_emp_details_in );