declare
  -- INSERT one row

  -- static SQL
  -- fails at 9.0.1 with ORA-00906:
  -- missing left parenthesis
  v_emprec employees%rowtype := Emp_Util.Get_One_Row;
begin

  Emp_Util.Initialize_Count ( 'employees_2' );
  insert into employees_2 values v_emprec;
  Emp_Util.Show_Count_Change;
end;
/
-- PL/SQL procedure successfully completed.

rollback /* prepare for repeat or for next sample */;
-- Rollback complete.






declare
  -- Note: YOU CAN'T BIND AN EXPLICIT COLUMN LIST TO A RECDORD
  --
  -- fails at 9.2.0 with PL/SQL: ORA-00947:
  -- not enough values
  v_emprec employees%rowtype := Emp_Util.Get_One_Row;
begin
  insert into employees_2 (

      employee_id,
      first_name,
      last_name,
      email,
      phone_number,
      hire_date,
      job_id,
      salary,
      commission_pct,

      manager_id,
      department_id )
    values v_emprec;
end;
/
-- PL/SQL procedure successfully completed.
rollback /* prepare for repeat or for next sample */;
-- Rollback complete.






begin
  -- Note: YOU CAN'T USE A FUNCTION RETURNING A RECORD AS A BIND
  --
  -- fails at 9.2.0 with PL/SQL: ORA-00904: invalid column name
  insert into employees_2 values Emp_Util.Get_One_Row();
end;
/
-- ERROR at line N:

rollback /* prepare for repeat or for next sample */;
-- Rollback complete.





declare
  -- INSERT many rows, single row syntax
  -- static SQL
  -- fails at 9.0.1 with ORA-00906:
  -- missing left parenthesis

  --
  -- Actaully, this illustrates no more than the "INSERT one row" case
  -- there's no DML analogy to the different is SELECT
  -- between an implicit one-row cursor and a cursor loop
  v_emprecs Emp_Util.emprec_tab_t  := Emp_Util.Get_Many_Rows;
begin
  Emp_Util.Initialize_Count ( 'employees_2' );
  for j in v_emprecs.First..v_emprecs.Last
  loop
    v_emprecs(j).salary := v_emprecs(j).salary * 1.1 /* add realism */;
    insert into employees_2 values v_emprecs(j);
  end loop;
  Emp_Util.Show_Count_Change;

end;
/
-- PL/SQL procedure successfully completed.
rollback /* prepare for repeat or for next sample */;
-- Rollback complete.