Views, Synonyms, and Sequences

advertisement
CHAPTER 9
Views, Synonyms, and Sequences
Views, Synonyms, and Sequences
• Views are used extensively in reporting applications and
also to present subsets of data to applications.
• Synonyms provide a means to transparently allow users
to display and use other users’ objects.
• Sequences are often used to generate unique numbers
that are used to populate primary-key and foreign-key
values.
Uses for Views
• Create an efficient method of storing a SQL query for
reuse.
• Provide an interface layer between an application and
physical tables.
• Hide the complexity of a SQL query from an application.
• Report to a user about only a subset of columns and/or
rows.
Creating a View
• Create views on tables, views, or materialized views.
• Use the CREATE VIEW statement.
create table sales(
sales_id number primary key
,amnt number
,state varchar2(2)
);
• If the view already exists, consider using CREATE OR
REPLACE VIEW statement.
Views With Check Option
• You can issue UPDATE statements against views which result
in updating the underlying tables referenced in the view SQL
query.
• WITH CHECK OPTION specifies that the UPDATE statement
can only affect rows that are selected by the SQL the view is
based upon.
create or replace view sales_rockies as
select
sales_id
,amnt
,state
from sales
where state in ('CO','UT','WY','ID','AZ')
with check option;
Creating Read-Only Views
• If you don’t want a user to be able to perform INSERT,
UPDATE, or DELETE operations on a view, then don’t grant
those object privileges on the underlying table(s) to users with
access to the view.
• Also, specify READ ONLY when creating the view.
create or replace view sales_rockies as
select
sales_id
,amnt
,state
from sales
where state in ('CO','UT','WY','ID','AZ')
with read only;
Updatable Join Views
• If you have multiple tables defined in the FROM clause of
the SQL query on which the view is based, it’s still
possible to update the underlying tables.
• The DML statement must modify only one underlying
table.
• The view must be created without the READ ONLY
clause.
• The column being updated belongs to the key-preserved
table in the join view (there is only one key-preserved
table in a join view).
Creating an INSTEAD OF Trigger
• An INSTEAD OF trigger on a view instructs Oracle to
execute PL/SQL code instead of using the DML
statement.
create or replace trigger emp_dept_v_updt
instead of update on emp_dept_v
for each row
begin
update emp set emp_name=UPPER(:new.emp_name)
where emp_id=:old.emp_id;
end;
/
Modifying a View Definition
• CREATE OR REPLACE allows you to modify the view
definition without dropping the object.
• Advantage is that you don’t have to reissue any grants on
the view.
• Most DBAs/Developers almost always use the CREATE
OR REPLACE, and not dropping and recreating the view.
Displaying the SQL Used to Create a
View
• Troubleshooting issues with views often begins with
viewing the SQL that the view is based upon.
select
view_name
,text
from dba_views
where owner = upper('&owner')
and view_name like upper('&view_name');
Oracle Internal View Definitions
• You may occasionally need the definition of an Oracle
internal view.
• Sometimes you may wonder how Oracle is retrieving
information; you might be troubleshooting a complex
database issue or bug.
SQL> select view_definition from v$fixed_view_definition
where view_name='V$BH';
• Gives you insight into Oracle’s internal workings.
Renaming a View
• You may want to change the name so that it better
conforms to standard.
• You may want to rename a view before dropping it so that
you can better determine whether it’s in use.
SQL> rename inv to inv_old;
Dropping a View
• In general, for objects not being used, it’s better to drop
them so as to not clutter up your environment and make it
more difficult to maintain and manage.
• Drop views that aren’t being used.
SQL> drop view inv_v;
Uses for Synonyms
• Provide transparent access to other users’ database
objects
• Eliminates the need to hard code schema name into
application code
Synonyms are Pointers to Database
Objects
• Tables
• Views or object views
• Other synonyms
• Remote objects via a database link
• PL/SQL packages, procedures, and functions
• Materialized views
• Sequences
• Java class schema object
• User-defined object types
Creating a Synonym
• Use the CREATE SYNONYM statement to create a
synonym.
SQL> select * from inv;
• Query from DBA/USER/ALL_SYNONYMS to view details.
Public Synonyms
• Public synonyms allow you to create access to the
synonym on a database wide basis.
• This simplifies some aspects of the DBA’s job.
• However, it has a few drawbacks:
• Troubleshooting can be problematic if you’re not aware of globally
defined (public) synonyms.
• Applications that share one database can have collisions on object
names if multiple applications use public synonyms that aren’t
unique within the database.
• Security should be administered as needed, not on a wholesale
basis.
• You’ll run into DBAs who often use public synonyms, and
other DBAs who never use them.
Dynamically Generating Synonyms
• Use SQL to generate SQL.
CONNECT &&master_user/&&master_pwd.@&&tns_alias
-SET LINESIZE 132 PAGESIZE 0 ECHO OFF FEEDBACK OFF
SET VERIFY OFF HEAD OFF TERM OFF TRIMSPOOL ON
-SPO gen_syns_dyn.sql
-select 'create or replace synonym ' || table_name ||
' for ' || '&&master_user..' ||
table_name || ';'
from user_tables;
-SPO OFF;
-SET ECHO ON FEEDBACK ON VERIFY ON HEAD ON TERM ON;
Displaying Synonym Metadata
select
synonym_name, table_owner, table_name, db_link
from user_synonyms
order by 1;
select
owner
,object_name
,object_type
,status
from dba_objects
where object_name like upper('&object_name%');
Renaming a Synonym
• Conform to naming standards.
• Determine if the synonym is being used.
SQL> rename inv_s to inv_st;
Dropping a Synonym
• In general, you should drop objects that are not being
used.
SQL> drop synonym inv;
Sequences
• Object that guarantees SELECT access to a unique
integer for the given sequence.
• Used often for PK and FK values.
Creating a Sequence
SQL> create sequence inv_seq;
SQL> create sequence inv2 start with 10000 maxvalue
1000000;
Sequence Pseudo-columns
• Two pseudo column values used to access a sequence:
• NEXTVAL
• CURRVAL
SQL> select inv_seq.nextval from dual;
SQL> select inv_seq.currval from dual;
Autoincrementing Columns
• Oracle doesn’t have a true autoincrementing column
object like some other databases provide.
create or replace trigger inv_bu_tr
before insert on inv
for each row
begin
select inv_seq.nextval into :new.inv_id from dual;
end;
/
Interesting Uses of Sequences
SQL> create sequence inv_seq_odd start with 1 increment
by 2;
SQL> create sequence inv_seq_even start with 2
increment by 2;
SQL> create sequence inv_seq_odd_dwn start with -1
increment by -2;
SQL> create sequence inv_seq_even_dwn start with -2
increment by -2;
Using One Sequence or Many
• Usually there are not performance issues with accessing
one sequence.
• Usually there are not issues with using large integer
values for populating NUMBER columns.
Viewing Sequence Metadata
select
sequence_name
,min_value
,max_value
,increment_by
from user_sequences;
SQL> select
dbms_metadata.get_ddl('SEQUENCE','INV_SEQ') from
dual;
Renaming a Sequence
• Conform to naming standards.
• Rename the object before you drop it.
SQL> rename inv_seq to inv_seq_old;
Dropping a Sequence
• Drop objects that aren’t being used.
SQL> drop sequence inv;
Resetting a Sequence
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
UNDEFINE seq_name
UNDEFINE reset_to
PROMPT "sequence name" ACCEPT '&&seq_name'
PROMPT "reset to value" ACCEPT &&reset_to
COL seq_id NEW_VALUE hold_seq_id
COL min_id NEW_VALUE hold_min_id
-SELECT &&reset_to - &&seq_name..nextval - 1 seq_id
FROM dual;
-SELECT &&hold_seq_id - 1 min_id FROM dual;
-ALTER SEQUENCE &&seq_name INCREMENT BY &hold_seq_id MINVALUE
&hold_min_id;
-SELECT &&seq_name..nextval FROM dual;
-ALTER SEQUENCE &&seq_name INCREMENT BY 1;
Summary
• Views, Synonyms, and Sequences are used extensively
within database applications.
• Views are stored SQL queries that allow you to
encapsulate SQL logic and present it as an object to the
user.
• Synonyms provide a transparent mechanism to enable
access to another user’s objects.
• Sequences are counters that are often used to guarantee
unique values are generated for use when populating
primary and foreign key columns.
Download