Function Based Indexes and Global Temporary Tables

作者: Maclean Liu , post on June 21st, 2006 , English Version
【本站文章除注明转载外,均为本站原创编译】
转载请注明:文章转载自: Oracle Clinic – Maclean Liu的个人技术博客 [http://www.oracledatabase12g.com/]
本文标题: Function Based Indexes and Global Temporary Tables
本文永久地址: http://www.oracledatabase12g.com/archives/function-based-indexes-and-global-temporary-tables.html

A nonunique index can be used to enforce a primary key or unique constraint.

In Oracle8i indexes can be rebuilt without locking the table.

The DROP COLUMN option of the ALTER TABLE command is restartable.

The MOVE option of the ALTER TABLE command retains the constraints of the table.

Data rows in the global temporary table are always deleted when A user session is terminated

1.    As user Scott, create a table with three columns.  Create an index on all three columns in the order they appear in the table.  Then add a primary key constraint using the first two columns with the second column of the table appearing first.  Verify that only one index, the index being used to enforce the constraint, has been defined for the table.

Hint: if the columns in the table were labeled A, B, and C, the index would be on (A, B, C) while the constraint would be on columns (B, A).

Solution:

 

connect scott/tiger

 

 

CREATE TABLE acct

( acct_no       NUMBER(10),

customer_id           NUMBER(10),

acct_comment VARCHAR2(200),

CONSTRAINT pk_cid_aid  PRIMARY KEY(customer_id, acct_no) DISABLE

)

/

CREATE INDEX I_ANO_CNO_ACOMM

ON acct(acct_no, customer_id, acct_comment)

ONLINE

/

ALTER TABLE acct

ENABLE CONSTRAINT pk_cid_aid

/

 

select index_name, table_name from user_indexes

where table_name = ‘ACCT’

/

2. As user Scott create a table containing three columns.  Remove the third column using one of the new methods introduced in Oracle8i.  Verify that the column is no longer part of the table.

Solution:

connect scott/tiger

 

 

CREATE TABLE acct_col

( acct_col_no         NUMBER(10),

customer_id           NUMBER(10),

acct_col_comment    VARCHAR2(200)

)

/

ALTER TABLE acct_col

SET UNUSED COLUMN acct_col_comment

/

 

desc acct_col

 

SELECT * FROM user_unused_col_tabs

/

ALTER TABLE acct_col

DROP UNUSED COLUMNS

/

SELECT * FROM user_unused_col_tabs

/

 

3. As user SYS create a global temporary table containing three columns.  The inserted rows should remain available until explicitly deleted or the session ends.  Make the table available to anyone who wishes to use it.  The users should not have to know the table owner in order to make use of it.

Solution:

connect / as sysdba

 

CREATE GLOBAL TEMPORARY TABLE emp_temp_X

(eno NUMBER,

ename VARCHAR2(20),

sal NUMBER)

ON COMMIT PRESERVE ROWS;

 

connect / AS SYSDBA

 

CREATE PUBLIC SYNONYM emp_temp for emp_temp_x

/

GRANT ALL ON emp_temp TO PUBLIC

/

col object_name format a20

SELECT owner, object_name, object_type FROM dba_objects

WHERE object_name LIKE ‘%EMP_TEMP%’

/

connect scott/tiger

 

desc emp_temp

 

select * from emp_temp

/

 

 

© 2006 – 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.

相关文章 | Related posts:

  1. Siebel CRM with Oracle® Cost-Based Optimizer (CBO)
  2. Know Oracle Date And Time Function
  3. Materialized Views and Dimensions
  4. Cost-Based Oracle Fundamentals
  5. Practice:Demonstrating Oracle AUDIT Concepts and Procedures

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>