Creating Other Schema Objects

  

Creating Other Schema Objects Creating Other Schema Objects

Objectives

  After completing this lesson you should be able to do After completing this lesson, you should be able to do the following:

  • Create simple and complex views
  • Retrieve data from views
  • >Create, maintain, and use sequences>Create and maintain indexesCreate and maintain indexes
  • Create private and public synonyms

Database Objects

  Object Description Table Basic unit of storage; composed of rows View Logically represents subsets of data from one or more tables Sequence Generates numeric values Index Improves the performance of some queries Synonym Gives alternative names to objects y y j

  All rights reserved. a View? Oracle.

  2006, What Is Copyright ©

  table

Advantages of Views

  T t i t T k l To restrict data access To make complex queries easy To provide

  To present To provide data independence different views of the same data

  Simple Views and Complex Views

  Feature Simple Views Complex Views Feature Simple Views Complex Views Number of tables One One or more Contain functions No Yes Contain functions No Yes Contain groups of data No Yes DML operations Yes Not always through a view

Creating a View

  • You embed a subquery in the

CREATE VIEW statement: CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]];

You embed a subquery in the CREATE VIEW

  [WITH READ ONLY [CONSTRAINT constraint]];

  • The subquery can contain complex SELECT syntax.

Creating a View

  • employees in department 80:

Create the Create the EMPVU80 view, which contains details of EMPVU80 view which contains details of

  CREATE VIEW empvu80 p AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80; View created View created.

  Describe the structure of the view by using the

  i

  SQL*Plus DESCRIBE command: DESCRIBE empvu80

Creating a View

  Create a view by using column aliases in the Create a view by using column aliases in the subquery: CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE WHERE department_id = 50; department id = 50; View created.

  • Select the columns from this view by the given y g

  alias names:

  All rights reserved.

  Oracle.

  Data from a View 2006, Copyright ©

Modifying a View

  Modify the Modify the EMPVU80 view by using a CREATE OR EMPVU80 view by using a CREATE OR REPLACE VIEW clause. Add an alias for each column name: CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id) AS SELECT employee_id, first_name || ' ' || last name, salary, department id || last_name, salary, department_id FROM employees WHERE department_id = 80; View created. Column aliases in the CREATE OR REPLACE VIEW

  • clause are listed in the same order as the columns in the subquery. q y

  Creating a Complex View

  Create a complex view that contains group functions to Create a complex view that contains group functions to display values from two tables: CREATE OR REPLACE VIEW dept_sum_vu CREATE OR REPLACE VIEW dept sum vu (name, minsal, maxsal, avgsal) AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e JOIN departments d l d d ON (e.department_id = d.department_id) GROUP BY d.department_name; View created.

Rules for Performing DML O DML Operations on a View ti Vi

  You can usually perform DML operationsYou can usually perform DML operations on simple views.

  You cannot remove a row if the view contains the following:

  Group functionsA GROUP BY clauseThe

  DISTINCT keywordThe pseudocolumn ROWNUM keyword

Rules for Performing DML O ti Vi DML Operations on a View

  You cannot modify data in a view if it contains: You cannot modify data in a view if it contains:

  • Group functions
  • A

GROUP BY clause

  • The

DISTINCT keyword

  • The pseudocolumn

  ROWNUM keyword C l d fi d b iColumns defined by expressions

Rules for Performing DML O ti Vi DML Operations on a View

  You cannot add data through a view if the view You cannot add data through a view if the view includes:

  • Group functions
  • A

GROUP BY clause

  • The

DISTINCT keyword

  • The pseudocolumn
  • The pseudocolumn

ROWNUM keyword

ROWNUM keyword

  • Columns defined by expressions
  • NOT NULL columns in the base tables that are not selected by the view

Using the WITH CHECK OPTION Clause

You can ensure that DML operations performed on • You can ensure that DML operations performed on the view stay in the domain of the view by using the WITH CHECK OPTION clause: CREATE OR REPLACE VIEW empvu20 * AS SELECT FROM employees WHERE department id = 20 depa t e t_ d WITH CHECK OPTION CONSTRAINT empvu20_ck ; View created

  Any attempt to change the department number for Any attempt to change the department number forany row in the view fails because it violates the WITH CHECK OPTION constraint.

  

Denying DML Operations

  You can ensure that no DML operations occur by You can ensure that no DML operations occur by adding the WITH READ ONLY option to your view definition.

  Any attempt to perform a DML operation on any row in the view results in an Oracle server error.

Denying DML Operations

  CREATE OR REPLACE VIEW empvu10 CREATE OR REPLACE VIEW

  10 (employee_number, employee_name, job_title) AS SELECT employee_id, last_name, job_id FROM employees p y WHERE department_id = 10 WITH READ ONLY ; View created.

  Removing a View

  You can remove a view without losing data because a view You can remove a view without losing data because a view is based on underlying tables in the database. DROP VIEW view; ; DROP VIEW empvu80; View dropped.

Practice 10: Overview of Part 1

  R i iRemoving views

  This practice covers the following topics: This practice covers the following topics:

  • Creating a simple view
  • Creating a complex view g p
  • Creating a view with a check constraint

  • Attempting to modify data in the view

  Sequences

  Object Description Object Description Table Basic unit of storage; composed of rows View Logically represents subsets of data from View Logically represents subsets of data from one or more tables Sequence Generates numeric values I d I th f f Index Improves the performance of some queries Synonym Gives alternative names to objects

Sequences

  A sequence: A sequence: Can automatically generate unique numbersIs a sharable object j

  • Can be used to create a primary key value

  Replaces application codeSpeeds up the efficiency of accessing sequence S d th ffi i f i values when cached in memory 1

  2 3 4 5 6 7 8 9 10

  CREATE SEQUENCE Statement: Syntax S t

  Define a sequence to generate sequential numbers Define a sequence to generate sequential numbers automatically: CREATE SEQUENCE sequence CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

Creating a Sequence

Create a sequence named Create a sequence named DEPT_DEPTID_SEQ to be DEPT DEPTID SEQ to be used for the primary key of the DEPARTMENTS table. Do not use the CYCLE option

  • CREATE SEQUENCE dept_deptid_seq

  INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE; Sequence created.

  INCREMENT BY 10

NEXTVAL and CURRVAL Pseudocolumns

  NEXTVAL returns the next available sequence value. NEXTVAL returns the next available sequence value It returns a unique value every time it is referenced, even for different users. CURRVAL obtains the current sequence value.

  • NEXTVAL must be issued for that sequence before
  • CURRVAL contains a value.

Using a Sequence

  Insert a new department named “Support” inInsert a new department named “Support” in location ID 2500:

  INSERT INTO departments(department id

  INSERT INTO departments(department_id, department_name, location_id)

  VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);

  • View the current value for the

  DEPT_DEPTID_SEQ sequence: 1 row created. sequence: SELECT dept_deptid_seq.CURRVAL FROM dual;

Caching Sequence Values

  Caching sequence values in memory gives fasterCaching sequence values in memory gives faster access to those values.

  • Gaps in sequence values can occur when:
    • A rollback occurs
    • The system crashes
    • A sequence is used in another table A sequence is used in another table

Modifying a Sequence

  Change the increment value maximum value minimum Change the increment value, maximum value, minimum value, cycle option, or cache option: ALTER SEQUENCE dept_deptid_seq S Q C d t d tid

  INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE; Sequence altered.

Guidelines for Modifying a Sequence S

You must be the owner or have the You must be the owner or have the ALTER privilege ALTER privilege for the sequence

  Only future sequence numbers are affected.The sequence must be dropped and re-created to restart the sequence at a different number. Some validation is performed.To remove a sequence, use the DROP statement:

  • DROP SEQUENCE dept_deptid_seq; Sequence dropped.

  Indexes

  Object Description Object Description Table Basic unit of storage; composed of rows View Logically represents subsets of data from View Logically represents subsets of data from one or more tables Sequence Generates numeric values I d I th f f Index Improves the performance of some queries Synonym Gives alternative names to objects

Indexes

  An index: An index: Is a schema objectCan be used by the Oracle server to speed up the y

  • p p retrieval of rows by using a pointer Can reduce disk I/O by using a rapid path access
  • method to locate data quickly method to locate data quickly Is independent of the table that it indexesIs used and maintained automatically by the Oracle server

How Are Indexes Created?

  Automatically: A unique index is created Automatically: A unique index is created automatically when you define a PRIMARY KEY or UNIQUE constraint in a table definition.

  Manually: Users can create nonunique indexes on columns to speed up access to the rows.

Creating an Index

  Create an index on one or more columns:Create an index on one or more columns: CREATE INDEX index

  column

  ON table (column[ ON table (column[, column]...); ] ); Improve the speed of query access to the LAST_NAME column in the EMPLOYEES table: LAST NAME column in the EMPLOYEES table: CREATE INDEX emp_last_name_idx ON employees(last_name); ON l (l t ) Index created.

Index Creation Guidelines

  Create an index when:

  A column contains a wide range of values A l t i id f l A column contains a large number of null values

One or more columns are frequently used together in a

WHERE clause or a join condition The table is large and most queries are expected to retrieve less than 2% to 4% of the rows in the table

  Do not create an index when:

  The columns are not often used as a condition in the query The table is small or most queries are expected to retrieve more The table is small or most queries are expected to retrieve more than 2% to 4% of the rows in the table The table is updated frequently The indexed columns are referenced as part of an expression The indexed columns are referenced as part of an expression

Removing an Index

  Remove an index from the data dictionary by using Remove an index from the data dictionary by using the

DROP INDEX command: DROP INDEX index; DROP INDEX index; Remove the UPPER_LAST_NAME_IDX index from the

  • data dictionary: data dictionary:

  DROP INDEX emp_last_name_idx; Index dropped.

  To drop an index, you must be the owner of the index or have the DROP ANY INDEX privilege.

  Synonyms

  Object Description Object Description Table Basic unit of storage; composed of rows View Logically represents subsets of data from View Logically represents subsets of data from one or more tables Sequence Generates numeric values I d I th f f Index Improves the performance of some queries Synonym Gives alternative names to objects

Synonyms

  Simplify access to objects by creating a synonym (another Simplify access to objects by creating a synonym (another name for an object). With synonyms, you can:

  • Create an easier reference to a table that is owned by

  another user

  • Shorten lengthy object names

  CREATE [PUBLIC] SYNONYM synonym FOR object;

Creating and Removing Synonyms

  • Create a shortened name for the
  • Create a shortened name for the

DEPT_SUM_VU view: CREATE SYNONYM d sum

DEPT SUM VU

  CREATE SYNONYM d_sum FOR dept_sum_vu; Synonym Created.

  • Drop a synonym:
  • Drop a synonym:

  DROP SYNONYM d_sum; Synonym dropped.

  

Summary

  In this lesson you should have learned how to: In this lesson, you should have learned how to:

  • Create, use, and remove views
  • Automatically generate sequence numbers by using a y g q y g

  sequence generator