declare
  -- UPDATE RETURNs one row

  -- dynamic SQL
  -- fails at 9.2.0 with PLS-00429:
  -- unsupported feature with RETURNING clause
  --
  -- NO FLAVOR OF EXECUTE IMMEDIATE IS SUPPORTED WITH A RECORD BIND YET

  --
  -- Ideally the SQL syntax should allow not listing the columns explicitly
  v_employee_id employees_0.employee_id%type := 100;
  v_emprec employees_0%rowtype;
begin
  execute immediate '

    update employees_0 set salary = salary * 1.1
      where employee_id = :in_employee_id
      returning
        employee_id,
        first_name,
        last_name,
        email,

        phone_number,
        hire_date,
        job_id,
        salary,
        commission_pct,
        manager_id,
        department_id
      into

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

        :manager_id,
        :department_id'
    using v_employee_id
    returning into v_emprec;
end;
/
-- ERROR at line N:
rollback /* prepare for repeat or for next sample */;
-- Rollback complete.






declare
  -- WORKAROUND
  -- List all the columns for RETURNING both in the SQL
  -- and in the target out-bind
  -- Doesn't use RECORD bind so works pre 9.2.0
  v_employee_id     employees_0.employee_id    %type := 100;
  v_emprec          employees_0                %rowtype;

begin
  execute immediate '
    update employees_0 set salary = salary * 1.1
      where employee_id = :in_employee_id
      returning
        employee_id,
        first_name,
        last_name,
        email,
        phone_number,
        hire_date,
        job_id,

        salary,
        commission_pct,
        manager_id,
        department_id
      into
        :employee_id,
        :first_name,
        :last_name,
        :email,
        :phone_number,
        :hire_date,
        :job_id,
        :salary,

        :commission_pct,
        :manager_id,
        :department_id'
    using v_employee_id
    returning into
      v_emprec.employee_id,
      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;
  Emp_Util.Show_One ( v_emprec );
end;
/
-- PL/SQL procedure successfully completed.
rollback /* prepare for repeat or for next sample */;
-- Rollback complete.