مزیت‌های View

1 . می‌توان پرس و جوی پیچیده پیاده‌سازی کرد. 2 . ارتباط مستقیم کاربران را با جداول حذف کرد.

ورود داده در View

SQL> CREATE TABLE TBL1(ID NUMBER, NAME VARCHAR2(20));
Table created.
SQL> CREATE VIEW V1 AS SELECT * FROM TBL1;
View created.
SQL> INSERT INTO V1(ID, NAME) VALUES(1, 'MAHDI');
1 row created.
SQL> COMMIT;
Commit complete.

س: اگر view ما ترکیبی باشه به چه صورت باید insert را انجام دادا؟

ج: با pl/sql می‌توان insert را انجام داد، چون insert ما باید قاعده view رو رعایت کنه و روی ضرب دکارتی تاثیر نذاره

س: اگر در دستورمان Aggregate functions داشته باشیم(توابعی مانند Sum و Countو...) می‌توان با view از آنها استفاده کرد؟

ج: خیر

View همراه با Constraint

به مثال زیر دقت کنید:

SQL> CREATE VIEW V2 AS SELECT * FROM TBL1 WHERE ID>20;
View created.
SQL> INSERT INTO V2(ID, NAME) VALUES(1, 'MOHSEN');
1 row created.
SQL> INSERT INTO V2(ID, NAME) VALUES(30, 'MOHAMMAD');
1 row created.
SQL> SELECT * FROM V2;
ID NAME
---------- --------------------
30 MOHAMMAD
SQL> SELECT * FROM TBL1;
ID NAME
---------- --------------------
1 MAHDI
1 MOHSEN
30 MOHAMMAD

حال می‌خواهیم view ای ایجاد کنیم که insert در آن به شرطی انجام می‌شود که رکود وارد شده در دامنه view باشد.

Create view v1 as select * from t1 where id>20 with check option constraint hoooooo;

 حال اگر در view مورد نظر عمل

Insert into v1 (id) values (21);

انجام شود بانک hoooooo می‌کند.

نکته: با این عمل تنها دیتاهایی از طریق view وارد جدول می‌شوند که view بتواند آنها را ببیند.

نکته: چون view موجودیتی مستقل نیست پس همیشه آپدیت می‌شود. مگر با Materialized view که خود شما حتماً باید بهش دستور آپدیت رو بدهید.

انواع View

Read only

این view فقط خواندنی است و قابل تغییر نیست.

Create view v1 as select * from t1 with read only constraint hoooooo

اگر روی این view اطلاعات وارد شود در آن صورت بانک hoooooo می‌کند.

مثال:

SQL> CREATE TABLE T3(ID NUMBER, NAME VARCHAR2(20));
Table created.
SQL> INSERT INTO T3 VALUES(1, 'MAHDI');
1 row created.
SQL> INSERT INTO T3 VALUES(2, 'MOHAMMAD');
1 row created.
SQL> INSERT INTO T3 VALUES(2, 'MOHSEN');
1 row created.
SQL> CREATE VIEW V3 AS SELECT * FROM T3 WITH READ ONLY CONSTRAINT HOOOOO;
View created.
SQL> INSERT INTO T3 VALUES (4, 'AKBAR');
1 row created.
SQL> INSERT INTO V3 VALUES (4, 'AKBAR');
INSERT INTO V3 VALUES (4, 'AKBAR')
*
ERROR at line 1:
ORA-42399: cannot perform a DML operation on a read-only view

Materialized view

این ویو ها واقعاً فضا اشغال می‌کنند(موجودیت دارند) و سرعت را بسیار بالا می‌برند ولی offline هستند یعنی خود به خود بروزرسانی نمی‌شوند.

CREATE MATERIALIZED VIEW view-name
BUILD [IMMEDIATE | DEFERRED]
REFRESH [FAST | COMPLETE | FORCE ]
ON [COMMIT | DEMAND ]
[[ENABLE | DISABLE] QUERY REWRITE]
[ON PREBUILT TABLE]
AS
SELECT ...;

در فصل‌های آینده بیشتر با این نوع view آشنا خواهیم شد.

نکته:Materialized View واحدی بین جدول و view و به طور خودکار آپدیت نخواهد شد.