Expert

Q:

5-23.

Multiple steps are necessary. First of all, you want to move the procedure within a package, so that you can define and make available to the procedure’s parameter list these required structures:

  • A record type containing a single phone number

  • A record type containing multiple phone numbers

So within the lobbying package, define a phone number record type:


/* Filename on web page: lobbying.pkg */
CREATE OR REPLACE PACKAGE lobbying
IS
   TYPE phone_num_rec_type IS RECORD (
   area_code      VARCHAR2(3),
   phone_prefix   VARCHAR2(3),
   phone_number   VARCHAR2(4)
   );

Then declare a lobbyist contact record type, which is a collection of phone-number records:

TYPE lobbyist_contact_rec_type IS RECORD (
   home_phone      phone_num_rec_type,
   office_phone    phone_num_rec_type,
   cell_phone      phone_num_rec_type,
   fax_phone       phone_num_rec_type,
   bathroom_phone  phone_num_rec_type,
   bathroom_fax    phone_num_rec_type
   );

Finally, declare the insert_lobbyist_contact procedure in terms of the lobbyist contact record type:

   PROCEDURE insert_lobbyist_contact (
      p_lobbyist_contact_rec_in lobbyist_contact_rec_type);
END lobbying;

Q:

5-24.

When you create a PL/SQL table based on a record structure, that record can be composed only of scalar fields. A nested record type may not define a PL/SQL table type. Yet, in this example, dept_rec_type has a field that is not scalar; it contains a field which is a PL/SQL table.

Q:

5-25.

The compiler will ...

Get Oracle PL/SQL Programming: A Developer's Workbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.