Oracle9i SQL Reference Release 2 (9.2) Part Number A96540-02 |
|
|
View PDF |
This section tells you how to refer to schema objects and their parts in the context of a SQL statement. This section shows you:
The following diagram shows the general syntax for referring to an object or a part:
object_part::=
where:
object
is the name of the object.schema
is the schema containing the object. The schema qualifier lets you refer to an object in a schema other than your own. You must be granted privileges to refer to objects in other schemas. If you omit schema
, then Oracle assumes that you are referring to an object in your own schema.
Only schema objects can be qualified with schema
. Schema objects are shown with list item 7. Nonschema objects, also shown with list item 7, cannot be qualified with schema
because they are not schema objects. (An exception is public synonyms, which can optionally be qualified with "PUBLIC
". The quotation marks are required.)
part
is a part of the object. This identifier lets you refer to a part of a schema object, such as a column or a partition of a table. Not all types of objects have parts.dblink
applies only when you are using Oracle's distributed functionality. This is the name of the database containing the object. The dblink
qualifier lets you refer to an object in a database other than your local database. If you omit dblink
, then Oracle assumes that you are referring to an object in your local database. Not all SQL statements allow you to access objects on remote databases.
You can include spaces around the periods separating the components of the reference to the object, but it is conventional to omit them.
When you refer to an object in a SQL statement, Oracle considers the context of the SQL statement and locates the object in the appropriate namespace. After locating the object, Oracle performs the statement's operation on the object. If the named object cannot be found in the appropriate namespace, then Oracle returns an error.
The following example illustrates how Oracle resolves references to objects within SQL statements. Consider this statement that adds a row of data to a table identified by the name departments
:
INSERT INTO departments VALUES ( 280, 'ENTERTAINMENT_CLERK', 206, 1700);
Based on the context of the statement, Oracle determines that departments
can be:
Oracle always attempts to resolve an object reference within the namespaces in your own schema before considering namespaces outside your schema. In this example, Oracle attempts to resolve the name dept
as follows:
dept
. If the object is not of the correct type for the statement, then Oracle returns an error. In this example, dept
must be a table, view, or a private synonym resolving to a table or view. If dept
is a sequence, then Oracle returns an error.dept
is a public synonym for a sequence, then Oracle returns an error.
To refer to objects in schemas other than your own, prefix the object name with the schema name:
schema.object
For example, this statement drops the employees
table in the sample schema hr
:
DROP TABLE hr.employees
To refer to objects in databases other than your local database, follow the object name with the name of the database link to that database. A database link is a schema object that causes Oracle to connect to a remote database to access an object there. This section tells you:
You create a database link with the statement CREATE DATABASE LINK. The statement lets you specify this information about the database link:
Oracle stores this information in the data dictionary.
When you create a database link, you must specify its name. Database link names are different from names of other types of objects. They can be as long as 128 bytes and can contain periods (.) and the "at" sign (@).
The name that you give to a database link must correspond to the name of the database to which the database link refers and the location of that database in the hierarchy of database names. The following syntax diagram shows the form of the name of a database link:
dblink::=
where:
database
should specify the name
portion of the global name of the remote database to which the database link connects. This global name is stored in the data dictionary of the remote database; you can see this name in the GLOBAL_NAME
view.domain
should specify the domain
portion of the global name of the remote database to which the database link connects. If you omit domain
from the name of a database link, then Oracle qualifies the database link name with the domain of your local database as it currently exists in the data dictionary.connect_descriptor
lets you further qualify a database link. Using connect descriptors, you can create multiple database links to the same database. For example, you can use connect descriptors to create multiple database links to different instances of the Real Application Clusters that access the same database.
The combination database.domain
is sometimes called the "service name".
Oracle uses the username and password to connect to the remote database. The username and password for a database link are optional.
The database connect string is the specification used by Oracle Net to access the remote database. For information on writing database connect strings, see the Oracle Net documentation for your specific network protocol. The database string for a database link is optional.
Database links are available only if you are using Oracle's distributed functionality. When you issue a SQL statement that contains a database link, you can specify the database link name in one of these forms:
complete
is the complete database link name as stored in the data dictionary, including the database
, domain
, and optional connect_descriptor
components.partial
is the database
and optional connect_descriptor
components, but not the domain
component.
Oracle performs these tasks before connecting to the remote database:
GLOBAL_NAME
data dictionary view.)GLOBAL_NAMES
parameter is true
, then Oracle verifies that the database.domain
portion of the database link name matches the complete global name of the remote database. If this condition is true, then Oracle proceeds with the connection, using the username and password chosen in Step 2. If not, Oracle returns an error.You can disable the requirement that the database.domain
portion of the database link name must match the complete global name of the remote database by setting to false
the initialization parameter GLOBAL_NAMES
or the GLOBAL_NAMES
parameter of the ALTER
SYSTEM
or ALTER
SESSION
statement.
See Also:
Oracle9i Database Administrator's Guide for more information on remote name resolution |
To reference object type attributes or methods in a SQL statement, you must fully qualify the reference with a table alias. Consider the following example from the sample schema oe
, which contains a type cust_address_typ
and a table customers
with a cust_address
column based on the cust_address_typ
:
CREATE TYPE cust_address_typ AS OBJECT ( street_address VARCHAR2(40) , postal_code VARCHAR2(10) , city VARCHAR2(30) , state_province VARCHAR2(10) , country_id CHAR(2) ); / CREATE TABLE customers ( customer_id NUMBER(6) , cust_first_name VARCHAR2(20) CONSTRAINT cust_fname_nn NOT NULL , cust_last_name VARCHAR2(20) CONSTRAINT cust_lname_nn NOT NULL , cust_address cust_address_typ . . .
In a SQL statement, reference to the postal_code
attribute must be fully qualified using a table alias, as illustrated in the following example:
SELECT c.cust_address.postal_code FROM customers c; UPDATE customers c SET c.cust_address.postal_code = 'GU13 BE5' WHERE c.cust_address.city = 'Fleet';
To reference an object type's member method that does not accept arguments, you must provide "empty" parentheses. For example, the sample schema oe
contains an object table categories_tab
, based on catalog_typ
, which contains the member function getCatalogName
. In order to call this method in a SQL statement, you must provide empty parentheses as shown in this example:
SELECT c.getCatalogName() FROM categories_tab c WHERE category_id = 90;
See Also:
Oracle9i Database Concepts for more information on user-defined datatypes |