declare
  -- UPDATE ... SET ROW for one row

  -- dynamic SQL
  -- fails at 9.2.0 with PLS-00457:
  -- expressions have to be of SQL types
  --
  -- NO FLAVOR OF EXECUTE IMMEDIATE IS SUPPORTED WITH A RECORD BIND YET

  --
  v_emprec employees%rowtype := Emp_Util.Get_One_Row;
begin
  v_emprec.salary := v_emprec.salary * 1.2;
  execute immediate '
    update employees_0

      set row = :emprec
      where employee_id = :employee_id'
      using v_emprec, v_emprec.employee_id;
end;
/
-- ERROR at line N:
rollback /* prepare for repeat or for next sample */;

-- Rollback complete.





declare
  -- WORKAROUND

  -- Doesn't use RECORD bind so works pre 9.2.0
  v_emprec employees%rowtype := Emp_Util.Get_One_Row;
begin
  v_emprec.salary := v_emprec.salary * 1.2;
  execute immediate '
    update employees_0 set
      first_name        = :first_name,
      last_name         = :last_name,
      email             = :email,

      phone_number      = :phone_number,
      hire_date         = :hire_date,
      job_id            = :job_id,
      salary            = :salary,
      commission_pct    = :commission_pct,
      manager_id        = :manager_id,
      department_id     = :department_id
      where employee_id = :employee_id'
    using
      v_emprec.first_name,

      v_emprec.last_name,
      v_emprec.email,
      v_emprec.phone_number,
      v_emprec.hire_date,
      v_emprec.job_id,
      v_emprec.salary,
      v_emprec.commission_pct,
      v_emprec.manager_id,
      v_emprec.department_id,
      v_emprec.employee_id;
end;

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