Generally, you can think of the relationship between objects and object tables in the following way:
Classes (object types), which represent entities, map to object tables.
Attributes map to columns.
Objects map to rows.
Viewed in this way, each object table is an implicit type whose objects (specific rows) have the same attributes (column values). Creating explicit user-defined data types and object tables introduces a new level of functionality. The following example defines CUSTOMER_OBJ_TABLE based on the CUSTOMER_TYPE object:
Most of the common Oracle objects (1. stored programs, 2. tables, 3. indexes) are owned by individual Oracle accounts.
When user scott creates a stored procedure, it goes into his own "room" inside Oracle and his place is known as a schema.
You cannot see into his schema unless he (or the administrator) lets you in through the door.
The "walls" separating them are a set of rules that the database enforces.
By default, a stored procedure can read or write from any table in the same schema, but not from tables in another schema.
However, if goodguy so wishes, he can let you view or even modify the contents of his tables.
He can also give you permission to execute his PL/SQL programs. If he does not give you these rights, you probably will not even know that his tables and programs exist. You have no way of "seeing" into his account even to determine whether he owns anything interesting unless you have received administrator-level privileges. And of course, the reverse is also true; he cannot see your data unless he has been specifically authorized.
In the next lesson, the basic techniques used to query object tables will be discussed.