5.2 Dictionary Views: An Overview


There are some implicit relationships among the data dictionary views. Finding these relationships is often a result of experimenting with SQL queries against the data dictionary. Fortunately, there is a good deal of constancy with names used in the data dictionary.

For example, the view USER_TABLES contains a single row for each table. Each row contains detailed information about a table such as the physical storage parameters of that table. This data provides extent information telling you how the table will grow physically.

The USER_TAB_COLUMNS view contains one row for each column of each table in USER_TABLES. If a table has 10 columns , then you will find 10 rows in USER_TAB_COLUMNS, detailing information about the attributes of each column, such as the column data type. The column name TABLE_NAME is common between USER_TABLES and USER_TAB_COLUMNS so it is easy to join these views.

The information you obtain from data dictionary views is useful throughout all phases of a project. You can't possibly maintain familiarity with all data dictionary views; this is where the SQL*Plus DESCRIBE becomes most valuable . We may not be sure what columns are in a view, which makes it difficult to write a meaningful query, but we can first describe the view. This will show the column names.

If your account has the DBA role, then you can start discovering by first listing all view names with the query:

 
 SELECT view_name FROM dba_views ORDER BY 1; 

The DBA views query will return the full set of data dictionary views including the USER , ALL, and DBA views, as well as the v$ performance views (Chapter 2, Section 2.12, illustrates a sample query using the v$instance view). If you don't have the DBA role, you still have considerable access to the data dictionary. Start listing the views with:

 
 SELECT view_name FROM all_views ORDER BY 1; 

The view USER_OBJECTS is a reasonable starting point for looking into the data dictionary. There is a row in this view for everything we create. A partial description is shown next :

 
 SQL> desc user_objects  Name                           Null?    Type  ------------------------------ -------- ---------------  OBJECT_NAME                    VARCHAR2(128)  OBJECT_TYPE                    VARCHAR2(18)  CREATED                        DATE  STATUS                         VARCHAR2(7)  . . . . 

We can select a full list of object names and their types from this view. The ALL and DBA OBJECTS views includes an OWNER column. This permits us to see who owns what. To see all objects to which you have access and who owns those objects, you can execute the following query ”this is a lengthy output and includes all data dictionary objects at your disposal.

 
 SELECT object_type, object_name, owner, created, status   FROM all_objects ORDER BY 1; 

The DDL in Chapter 4 creates objects that we can see with the following:

 
  SQL>  SELECT object_type, object_name  2  FROM user_objects ORDER BY 1 DESC; OBJECT_TYPE        OBJECT_NAME ------------------ ----------------------- TABLE              COURSES TABLE              PARKING_TICKETS TABLE              PROFESSORS TABLE              STUDENTS TABLE              STUDENT_VEHICLES TABLE              STUDENTS_COURSES TABLE              STATE_LOOKUP INDEX              PK_COURSES INDEX              UK_STUDENTS_LICENSE INDEX              PK_PARKING_TICKETS INDEX              PK_PROFESSORS INDEX              PK_STATE_LOOKUP INDEX              PK_STUDENTS INDEX              PK_STUDENTS_COURSES INDEX              PK_STUDENT_VEHICLES 

Conceptually, the USER_OBJECTS view is a parent to other views that contain specific information about the objects we create. Two views of particular interest are: USER_TABLES and USER_SEQUENCES.

  • A row in USER_OBJECTS, for an object of type TABLE, means there is a row in USER_TABLES. The USER_TABLES row will have more specific information about that table. The following query joins these two views. It selects the column CREATED from USER_OBJECTS plus information from USER_TABLES.

     
     SELECT user_objects.created,        user_tables.table_name,        user_tables.tablespace_name   FROM user_objects,        user_tables  WHERE user_objects.object_name =        user_tables.table_name; 

    The result from this query, for the STUDENTS schema, is shown next.

     
     CREATED         TABLE_NAME             TABLESPACE_NAME --------------- ---------------------- ------------------- 18-jul-03 17:45 COURSES                STUDENT_DATA 18-jul-03 17:45 PARKING_TICKETS        STUDENT_DATA 18-jul-03 17:45 PROFESSORS             STUDENT_DATA 18-jul-03 17:45 STATE_LOOKUP           STUDENT_DATA 18-jul-03 17:45 STUDENTS               STUDENT_DATA 18-jul-03 17:45 STUDENTS_COURSES       STUDENT_DATA 18-jul-03 17:45 STUDENT_VEHICLES       STUDENT_DATA 
  • A row in USER_OBJECTS, for an object of type SEQUENCE, means there is a row in USER_SEQUENCES. The following query joins these two views where the OBJECT_TYPE = SEQUENCE.

     
     SELECT  <columns-you-choose>  FROM user_objects,        user_sequences  WHERE user_objects.object_name =        user_sequences.sequence_name; 


Programming Oracle Triggers and Stored Procedures
Programming Oracle Triggers and Stored Procedures (3rd Edition) (Prentice Hall PTR Oracle Series)
ISBN: 0130850330
EAN: 2147483647
Year: 2003
Pages: 111
Authors: Kevin Owens

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net