Thanks to eva one for clearing out my db concepts.
On Jul 20, 3:02 am, ddf <orat...@msn.com> wrote:
> Comments embedded.
>
> On Jul 18, 1:11 am, weird0 <amiredi...@gmail.com> wrote:
>
> > I would like to know what is the difference between a View and
> > Materialized View?
>
> > As far as my knowledge goes, view holds the result of select query
> > from tables.
>
> Incorrect. 'Regular' views store no data.
>
> > It makes the application faster because the result-set is
> > not calculated at run-time.
>
> Incorrect. A view is nothing more than a stored query, accessed by
> name, which executes when a select is issued against it. Values in
> such views are ALWAYS recalculated at run-time so rarely, if ever,
> does a 'regular' view improve performance.
>
> > Mview is set to be refreshed on some basis i.e. daily, weekly and
> > monthly. as opposed to view.
>
> That is only part of the story. A materialized view is a physical
> object containing data generated by a query; many times these queries
> include aggregates which could be time-consuming to calculate 'on the
> fly'. Since a materialized view is a physical object it can be
> indexed and partitioned; a 'regular' view cannot. Materialized views
> can be refreshed on a schedule, can be refreshed using either FAST or
> COMPLETE mode, can be refreshed on commit or refreshed on demand.
> FAST mode refreshes require materialized view logs on the base tables
> to track data changes. Materialized views can also be used to enforce
> constraints Oracle cannot normally enforce through a defined
> constraint, such as having no more tan X number of records with a
> given key value (one cannot use aggregates in a check constraint). An
> example of a materialized view as a constraint:
>
> SQL> create table product(
> 2 product_id number not null,
> 3 product_name varchar2(30) not null
> 4 );
>
> Table created.
>
> SQL>
> SQL> alter table product
> 2 add constraint product_pk
> 3 primary key(product_id);
>
> Table altered.
>
> SQL>
> SQL> create table prod_type(
> 2 type_id number not null,
> 3 type_name varchar2(30) not null
> 4 );
>
> Table created.
>
> SQL>
> SQL> alter table prod_type
> 2 add constraint prodtype_pk
> 3 primary key(type_id);
>
> Table altered.
>
> SQL>
> SQL> create table department(
> 2 dept_id number not null,
> 3 dept_name varchar2(20) not null
> 4 );
>
> Table created.
>
> SQL>
> SQL> alter table department
> 2 add constraint department_pk
> 3 primary key(dept_id);
>
> Table altered.
>
> SQL>
> SQL> create table dept_type(
> 2 dept_type_cd number not null,
> 3 dept_id number not null,
> 4 type_id number not null
> 5 );
>
> Table created.
>
> SQL>
> SQL> alter table dept_type
> 2 add constraint dept_type_pk
> 3 primary key(dept_type_cd);
>
> Table altered.
>
> SQL>
> SQL> alter table dept_type
> 2 add constraint dept_type_uk
> 3 unique(dept_id, type_id);
>
> Table altered.
>
> SQL>
> SQL> create table product_to_type(
> 2 prod_type_cd number not null,
> 3 product_id number not null,
> 4 dept_type_cd number not null
> 5 );
>
> Table created.
>
> SQL>
> SQL> alter table product_to_type
> 2 add constraint proddepttype_pk
> 3 primary key(prod_type_cd);
>
> Table altered.
>
> SQL>
> SQL> alter table product_to_type
> 2 add constraint prodid_fk
> 3 foreign key(product_id)
> 4 references product;
>
> Table altered.
>
> SQL>
> SQL> alter table product_to_type
> 2 add constraint prodtype_fk
> 3 foreign key(dept_type_cd)
> 4 references dept_type;
>
> Table altered.
>
> SQL>
> SQL> insert all
> 2 into product
> 3 values(100, 'Foo')
> 4 into product
> 5 values(200, 'Bar')
> 6 into prod_type
> 7 values(1, 'Regular')
> 8 into prod_type
> 9 values(2, 'Extra')
> 10 into department
> 11 values(10, 'ACCOUNTING')
> 12 into department
> 13 values(20, 'SALES')
> 14 into dept_type
> 15 values(1, 10, 1)
> 16 into dept_type
> 17 values(2, 10, 2)
> 18 into dept_type
> 19 values(3, 20, 1)
> 20 into dept_type
> 21 values(4, 20, 2)
> 22 into product_to_type
> 23 values(101, 100, 1)
> 24 into product_to_type
> 25 values(102, 100, 2)
> 26 into product_to_type
> 27 values(201, 200, 3)
> 28 into product_to_type
> 29 values(202, 200, 4)
> 30 select * from dual;
>
> 14 rows created.
>
> SQL>
> SQL> commit;
>
> Commit complete.
>
> SQL>
> SQL> create materialized view log on product_to_type with rowid,
> (product_id) including new values;
>
> Materialized view log created.
>
> SQL>
> SQL> create materialized view prod_type_dept_ck
> 2 refresh fast on commit
> 3 as
> 4 select product_id, count(*) ct from product_to_type
> 5 group by product_id
> 6 /
>
> Materialized view created.
>
> SQL>
> SQL> alter table prod_type_dept_ck
> 2 add constraint check_ct
> 3 check(ct < 3)
> 4 /
>
> Table altered.
>
> SQL>
> SQL> select *
> 2 from product_to_type;
>
> PROD_TYPE_CD PRODUCT_ID DEPT_TYPE_CD
> ------------ ---------- ------------
> 101 100 1
> 102 100 2
> 201 200 3
> 202 200 4
>
> SQL>
> SQL> insert
> 2 into product_to_type
> 3 values(203, 200, 2);
>
> 1 row created.
>
> SQL>
> SQL> commit;
> commit
> *
> ERROR at line 1:
> ORA-12008: error in materialized view refresh path
> ORA-02290: check constraint (BING.CHECK_CT) violated
>
> SQL>
> SQL> select *
> 2 from product_to_type;
>
> PROD_TYPE_CD PRODUCT_ID DEPT_TYPE_CD
> ------------ ---------- ------------
> 101 100 1
> 102 100 2
> 201 200 3
> 202 200 4
>
> SQL>
>
>
>
> > Please confirm.
>
> Sorry, no, your 'information' is wrong.
>
>
>
> > Regards,
> > Software Engineer
>
> David Fitzjarrell
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en
-~----------~----~----~----~------~----~------~--~---