No, this is not possible. Only PL/SQL Tables of scalar data types are supported. The only way to call such a stored procedure is by converting between several PL/SQL Tables of a scalar data type and a single PL/SQL Table of a record data type in a PL/SQL Block. This PL/SQL Block now only uses bind variables with PL/SQL Tables that can be used by Direct Oracle Access.

If we have a procedure Upd in package Employee that takes a PL/SQL Table of emp%rowtype records (defined by the t_emptable type in this package), then the PL/SQL Block would look something like this:

[quote]
Code
declare
  emptable employee.t_emptable;
  i binary_integer := 1;
begin
  loop
    emptable(i).empno := :empno(i);
    emptable(i).hiredate := :hiredate(i);
    emptable(i).sal := :sal(i);
    i := i + 1;
  end loop;
exception
  when no_data_found then Employee.Upd(emptable);
end;
[/quote]

This code loops through the 3 scalar PL/SQL Tables and copies the values to the PL/SQL table of records, until we get a no_data_found exception. At this point we have reached the end of the table, and we can call Employee.Upd with the PL/SQL Table of records as parameter.

We can't use PL/SQL Table functions like First, Next, Count, and so on, because these functions cannot operate on bind variables. That


Marco Kalter
Allround Automations