الانتقال إلى المحتوى

شرح كامل على الview بالتفصيل


programmer_85

Recommended Posts

السلام عليكم ورحمة الله بركاته ..

ان موضوع ال view في قواعد البيانات يعد من اهم المواضيع التي يعتمد عليها في البرمجة واستخراج الكيوري ..

اذا ماهو ال view ؟؟

هو عبارة عن نافذة او جدول خيالي او وهمي الذي يسمح لعرض البيانات من خلاله وكيفية التعديل عليها .

هو ايضا بعد كائن او مايسمى object قواعد البيانات التي يوجد داخل خادم قواعد البيانات database server

والذي يقوم فقط بتخزين الكيوري query عبر الامر select query .

في حين ان اي تغييرات تعمل من خلال view فانها سوف تعمل تلك التغييرات على الكائنات الاخرى في قواعد البيانات مثل الجداول مثلا.

ماهي الميزات في view؟؟

1- يقوم بتزويد ودعم الحماية .

2- يقوم بتحسين الاداء والتنفيذ في قواعد البيانات.

3- يقو بدعم والتزويد على امكانية الاداء والتنفيذ على اوامر DML وعملياتها . مثل INSERT ...

4- يقوم بتبسيط الكيوريات المعقدة complex queries حتى تسهل امكانية استخدامها .

5- يقوم بمساعدة الوصول الى قواعد البيانات عن طريق فقط مستخدمين محددين في ذلك



ماهي العيوب في view؟؟

1- الاعتماد على الجدول : يمكن ان تنشئ view معتمدا على ذلك في الجدول . لكن في حين انك

قمت بتغيير التركيب في الجدول اقصد الاعمدة التي هي مرتبطة مع view فلابد ان تقوم بتغيير ذلك ايضا في view


ماهو الفرق بين الجدول وال view ???

اولا الجدول :

1- يحتوي على بيانات

2- الجداول دائما تكون محددة ومقيدة

3- مستقلة : اي اذا حصل تغيير في غير الجداول لا علاقة بالجدول في ان تتغير محتوياته وفقا للكائن الذي غيرت فيه .

4- يقوم بدعم تنفيذ عمليات واومر DML على اي بياناتز

ثانيا : ال VIEW :

1- لاتحتوي علي بيانات

2- غير محددة

3- معتمدة على غيرها اي اذا حصل تغيير في الجدول سوف تتغير البيانات وفقا للجدول التي في VIEW

4- تدعم عمليات DML على البيانات المتربطة .



ماهي انواع ال VIEW ???

1- ال view البسيط simple

2- ال view المعقد complex



ماهي الصيغة العامة لانشاء ال view ??


create [or replace] [no force/]force] view view_name
as
select query
[with check option]
/[with read only];




وسوف نناقش كل مفهوم من الصيغة على حده ان شاء الله

يتبع

تم تعديل بواسطة programmer_85
رابط هذا التعليق
شارك

السلام عليكم

يتبع الدرس السابق

ماهو simple view؟؟

ان الفيو البسيط يتم فقط انشاءه على جدول واحد حيث انه لايحتوي على group by ,group fuction,distinct operator join.

ان عمليات DDL التي تتنفذ من خلال الجدول فانه هذا لايعكس اي تغييرات على simple view الفيو البسيط.

ولكن لكي يلائم الفيو ماتم تغييره في الجدول فيجب ان يستخدم الامر create or replace view command

مثال :

نقوم اولا بانشاء فيو عبر الصيغة العامة السابقة .

لانشاء فيو بسيط :

create view v1
as
select ename,job,sal,deptno from emp;[/size]
[size=5]



نقوم الان بعرض مافي الفيو وذلك عن طريق الامر select

select * from v1;



لنرى المخرجات بعد الاستعلام عنها :



ENAME JOB SAL DEPTNO
---------- --------- ------ ------
ALLEN SALESMAN 1600 30
WARD SALESMAN 1250 30
JONES MANAGER 2975 20
MARTIN SALESMAN 1250 30
BLAKE MANAGER 2850 30
CLARK MANAGER 2450 10
SCOTT ANALYST 3000 20
KING PRESIDENT 5000 10
TURNER SALESMAN 1500 30
FORD ANALYST 3000 20

10 rows selected.


نقوم الان بحذف القسم 10 من الفيو ومن ثم نرى ذلك هل تم حذفه من الجدول ام لا.

delete from v1 where deptno=10;



سوف تكون المخرجات اولا في الفيو كالاتي :



ENAME JOB SAL DEPTNO
---------- --------- ------ ------
ALLEN SALESMAN 1600 30
WARD SALESMAN 1250 30
JONES MANAGER 2975 20
MARTIN SALESMAN 1250 30
BLAKE MANAGER 2850 30
SCOTT ANALYST 3000 20
TURNER SALESMAN 1500 30
FORD ANALYST 3000 20

8 rows selected.


ثانيا نرى المخرجات في الجدول emp والذي يعد هو الاصلي للبيانات.

select ename ,job,sal,deptno from emp;


المخرجات راح تكون كالاتي:



ENAME JOB SAL DEPTNO
---------- --------- ------ ------
ALLEN SALESMAN 1600 30
WARD SALESMAN 1250 30
JONES MANAGER 2975 20
MARTIN SALESMAN 1250 30
BLAKE MANAGER 2850 30
SCOTT ANALYST 3000 20
TURNER SALESMAN 1500 30
FORD ANALYST 3000 20


اذا استنتنجنا من ذلك ان في الاصل يتم حذف في الجدول ولكن من خلال الفيو

اي ان الامر يذهب اولا ويحذف من الجدول emp ولكن عن طريقة واجهة view .

ايضا ممكن ان نعمل update من خلال الفيو وكلن في الاصل كما ذكرنا ان عمليات DML تتم من خلال الفيو

ولكن تغير البيانات تكون في الجدول .

update v1 set sal=sal+100;



سوف تكون المخرجات كالاتي:

select * from v1;
or[/size]
[size=5]select * from emp;



المخرجات التي في الجدول هي انفسها التي في الفيو



ENAME JOB SAL DEPTNO
---------- --------- ------ ------
ALLEN SALESMAN 1700 30
WARD SALESMAN 1350 30
JONES MANAGER 3075 20
MARTIN SALESMAN 1350 30
BLAKE MANAGER 2950 30
SCOTT ANALYST 3100 20
TURNER SALESMAN 1600 30
FORD ANALYST 3100 20

8 rows selected.


ملاحظة مهمة:

عندما قمنا بانشاء الفيو قمنا فقط باخذ بعض الاعمدة من الجدول emp وليس الكل كالاتي:

select ename,job,sal,deptno from emp

الان نريد ان نضيف صف جديد من خلال الامر insert خلال الفيو الى الجدول وليس الى الجدول مباشرة .

من المعلوم ان لدينا فقط اربعة اعمدة في الفيو .. اذا لايتيح لنا فقط الاضافة الا عبر تلك الاعمدة الاربعة .

insert into v1 values('ahmed','doctor',2000,10);



عندما نضيف الصف السابق الى الفيو فانه يعطينا خطا قطعا

وهذا هو الخطا :



ORA-01400: cannot insert NULL into ("SCOTT"."EMP"."EMPNO")



هذا الخطا يخبر بان لايمكن ان نضيف صف جديد وذلك بسبب ان لدينا في الجدول وليس في الفيو

حقل اسمه EMPNO لايحتوي على قيمة خالية اي NULL

فلابد ان نتبه ذلك عندما ننشئ الفيو نفحص اولا هل لدينا اعمدة لاتقبل القيم الخالية NULL ام لا .

يتبع .....
رابط هذا التعليق
شارك


جزاكم الله كل خير


موضوع ممتاز جدا


انا سمعت عن حاجه اسمه Materialize View


هل في فرق ؟؟؟




سياتي شرحها بالتفصيل ان شاء الله
رابط هذا التعليق
شارك

السلام عليكم

يتبع الدرس السابق.

المثال االثاني :

قم بانشاء v2 حيث انه يحتوي على كل الاعمدة التي في الجدول emp

سوف يكون انشاء v2 بالشكل التالي.

create view v2
as
select * from emp;



عندما نقوم باستعراض البيانات في الفيو عن طريق

select * from v2;



نلاحظ ان المخرجات في الفيو وكذا ايضا في الجدول emp نفسها وهي كالاتي:



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ------ --------- ------ ------ ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10



وكذا ايضا كما راينا في المثال السابق كيفية تطبيق اوامر DML على الفيو ومن خلال الفيو يتم التغير في الجدول .

وهنا ايضا عميلة insert فانك عندما تظيف للجدول فانه يقبله بلا شك لاننا عملنا في انشاء الفيو view كل الاعمدة في الجدول emp

ولن يحدث اي خطا في الامر insert كما وقع في المثال السابق وبينا ذلك .

الان : نقوم باضافة عمود جديد الى الجدول EMP وليكن اسمه expr اي عمود الخبرة وياتي اضافة هذا العمود بعد انشاء الفيو

ومن المعلوم عندما نظيف عمود جديد فانه يكون عن طريق الاوامر DDL التي تهتم باالتركيب والتغير في هيكلة الجدول .

alter table emp  add expr  number(2);[/size]
[size=5]



الان نقوم بالاستعراض الجدول هل فعلا تم اضافة عمود جديد الى emp ام لا .

select * from emp



ستكون المخرجات كالاتي :



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO EXPR
------ ---------- --------- ------ --------- ------ ------ ------ ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10



نعم بالفعل تم اضافة عمود جديد الى الجدول emp .

الان وهو المهم لنقم بعرض الفيو v2 هل تم اضافة العمود expr الى الفيو مباشرة ام لا .

select * from v2;



سوف تكون المخرجات كالاتي :



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ------ --------- ------ ------ ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10



اذا نلاحظ انه لم يتم اضافة العمود expr الى الفيو v2 وهذا يفيد مطلقا قطعا لا شك

ان اوامر DDL عندما يتم اجرائها على الجدول EMP فانها لاتحدث اي تغييرا في الفيو التي تم

انشاءه قبل التغيير في الجدول EMP.


الان لدينا نقطة مهمة : وهي اننا انشاءنا الفيو V2 وهو يحتوي على كل الاعمدة التي في الجدول EMP قبل اضافة العمود EXPR

الان نريد ان نقوم بحذف عمود من الجدول وليكن مثلا hiredate على سبيل المثال .

alter table emp drop column hiredate;



نقوم الان باستعراض الجدول emp

select * from emp;



نلاحظ ان المخرجات هي :



EMPNO ENAME JOB MGR SAL COMM DEPTNO EXPR
------ ---------- --------- ------ ------ ------ ------ ------
7369 SMITH CLERK 7902 800 20
7499 ALLEN SALESMAN 7698 1600 300 30
7521 WARD SALESMAN 7698 1250 500 30
7566 JONES MANAGER 7839 2975 20
7654 MARTIN SALESMAN 7698 1250 1400 30
7698 BLAKE MANAGER 7839 2850 30
7782 CLARK MANAGER 7839 2450 10
7788 SCOTT ANALYST 7566 3000 20
7839 KING PRESIDENT 5000 10
7844 TURNER SALESMAN 7698 1500 0 30
7876 ADAMS CLERK 7788 1100 20
7900 JAMES CLERK 7698 950 30
7902 FORD ANALYST 7566 3000 20
7934 MILLER CLERK 7782 1300 10



وفعلا تم حذف العمود hiredate من الجدول emp

الان لنرى الفيو v2 هل تم فعلا حذف العمود hiredate ام لا
select * from v2;



عندما نرى المخرجات في الفيو يعطي لنا رسالة خطا .

والرسالة هذه تقول بان تم حذف عمود من الفيو ولايمكن ان يعطي لنا اي مخرجات وهذه هي الرسالة .


ORA-04063: view "SCOTT.V2" has errors


اذا استنتجنا من ذلك نقطيتين مهمتين وهي:

الاولى : ان عندما نظيف اي عمود جديد الى الجدول مثلا emp بعد انشاء الفيو فانه العمود الجديد لايعرض في الفيو .

الثانية: ان عندما نقوم بحذف اي عمود من الجدول مثلا emp وهذا العمود قد تم اختياره او انشاءه مسبقا في فيو فاننا عندما

نعرض الفيو يعطي لنا رسالة خطا .. وهي تفيد بانه تم حذف بعض الاعمدة



لحل المشكلة في النقطة الثانية هي:

اننا لابد ان نعيد ان انشاء الفيو مرة ثانية وذلك عن طريق الصيغة التالية:

create or replace view v2 as
select * from emp;



لاحظ ان الصيغة السابقة هي نفسها التي نتسخدمها عند انشاء فيو جديد

فقط هناك كلمة اضافة وهي كلمة محجوزة اسمها replace وهي الاستبدال .

فتقوم يتتغير واعادة هيكلة الفيو وفقا للجدول emp الذي تم اجراء التعديلات عليه اخيرا .

وهكذا يمكن ان تعيد ذلك في حالة قمت بحذف عمود اخر وهي لتفادي المشكلة

التي وضحت سابقا ..


يتبع ..........

رابط هذا التعليق
شارك

السلام عليكم

يتبع الدرس السابق..

المثال الثالث :

create view v3 as
select * from emp
where deptno =10;



نقوم الان بعرض مافي الفيو v3 ووهو كما اشارنا سابقا نفس المعلومات التي في الجدول emp

select * from v3;



حيث ان المخرجات كالاتي :



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ------ --------- ------ ------ ------
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10




وهي نفسها كما في الجدول عندما تعرض ذلك .

الان سوف نقوم بادخال بعض الصفوف الجديدة عبر الفيو v3 لنرى ماهي الاخطاء التي ستظهر هنا

ومن ثم نقاوم بمعالجتها وفقا لحلها الصحيح والمناسب .

insert into v3 (empno,ename,deptno)values(1001,'ahmed
',10);[/size][/b]
[b][size=5]insert into v3 (empno,ename,deptno)values(1002,'omer',10);[/size][/b]
[b][size=5]insert into v3 (empno,ename,deptno)values(1003,'ali',10);[/size][/b]
[b][size=5]insert into v3 (empno,ename,deptno)values(1004,'amged',30);[/size][/b]
[b][size=5]



نلاحظ اننا عندما قمنا بانشاء الفيو v2 عملنا شرط وهو ان deptno = 10 اي اجلب لي

الموظفين الذي يعملون في الدائرة 10

ومن ثم قمنا بادخال 4 صفوف جديدة الى الفيو v3

حيث ان تلك الصفوف الجديدةى تم ادخال بشكل صحيح دون اي خطا

لكن نلاحظ في الصف الرابع والذي يقمن بادخاله عبر الفيو v3 والذي يحمل

الدائرة 30 .. ففي الالص كما اشارنا سابقا ان هذا كان بالاحرى ان لايمكن ادخاله الي الفيو v3

وفقا للشرط الذي كان في الفيو v3 عند انشاءه

نقوم الان بالاستعراض ونرى كلا من v3 والجدول emp

اولا الفيو v3

select * from v3;



المخرجات كالاتي في الفيو v3



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ------ --------- ------ ------ ------
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10
1001 ahmed 10
1002 omer 10
1003 ali 10


نلاحظ ان اصف الاخير الذي يحمل الدائرة 30 غير موجود في الفيو v3 ولكن مع هذا بالفعل تم ادخاله من خلال الفيو

اذا لنرى ذلك هل هو موجود مع تلك الصفوف الاخرى التي تم ادخالها موخرا في الجدول emp ام لا .

select * from emp;



المخرجات كالاتي في الجدول emp



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ------ --------- ------ ------ ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
1001 ahmed 10
1002 omer 10
1003 ali 10
1004 amged 30


اذا فعلا الصف الاخير الذي يحمل الدائرة 30 هو موجود بالفعل في الجدول emp

اذا كيف علينا ان نمنع ذلك من خلال الفيو حتى لايسمح بادخال اي قيمة الا اذا كانت القيمة موافقة للشرط الذي

تم انشاءه مع الفيو .

لهذا السبب تم انشاء شي اسمه check option view

وهو كما ذكرناه في الصيغة العامة في الدرس الاول .

بانه يعمل على فحص المدخل ..هل المدخل صحيح وفقل للشرك ام لا .

نرى ذلك في المثال االرابع وهو :

نقوم بانشاء فيو v4

[/size][/b]
[b][size=5]create view v4 as
select * from emp where deptno =10
with check option;[/size][/b]
[b][size=5]



نعرض الان فيو v4

select * from v4;



المخرجات كالاتي :



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ------ --------- ------ ------ ------
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10
1001 ahmed 10
1002 omer 10
1003 ali 10


نقوم الان بادخال فقط صفيين جديدين احدهما يحمل الدائرة 10 والاخر يحمل الدائرة 30

insert into v4 (empno,ename,deptno)values(1005,'sami',10);[/size][/b]
[b][size=5]



عند ادخال الصف الاول والذي يحمل 10 يتم ادخال دون اي مشكله لانه موافق للشرط الذي في الفيو v4

لكن عند ادخال الصف التالي والذي يحمل الدائرة 30

insert into v4 (empno,ename,deptno)values(1006,'kamal',30);



يقوم باعطاء لك خطا ويقول بان هذا المدخل غير متوافق مع الشرط الذي تم انشاءه في الفيو v4

وهذا هو الخطا:



ORA-01402: view WITH CHECK OPTION where-clause violation


في المرة السابقة تم ادخال الصف والذي يحمل الدائرة 30 دون اي خطا او فحص للمدخل

وذلك لان الشرط في الفيو السابق v3 لايحتوي على جملة الفحص للشرط وهي :

with check option

اذا الان عرفنا ماهي فائدة تلك الجملة والتي تفحص المدخل وفقا لللشرط ...

يتبع ........
رابط هذا التعليق
شارك

السلام عليكم اخوتي
اعذروني ماقدرت اواصل بقية الدروس لانشغالي

ولكن ان شاء الله في الايام القليلة القادمة سوف اكمل كل شرح الفيو

دعواتكم

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...
  • بعد 4 أسابيع...
  • بعد 2 أسابيع...

السلام عليكم ..

 

غدا ان شاء الله سوف اكمل مالم يتم من درس الفيو ... وانا اعتذر عن عدم اكمالي لذلك وذلك بسبب انشغالي 

رابط هذا التعليق
شارك

materialized view

 

عندما نقوم بانشاء  materialized view من خلال اي كائن في الداتا بيس (الجداول)

 

فان هذا الكائن او الجدول يجب ان يحتوي على primary key  حتى نقيد العمود الذي نريد ان نضع له ذلك .

 

ان الميزة في materialized view  هي زيادة تعزيز الاداء والتنفيذ في الكيوري وهذه ميزة كبيرة وعظيمة .

 

materialized view يقوم فقط بقراءة البيانات اي الكيووري ولايمكن ان يعمل او يسمح لتنفيذ العمليت الاخرى في لغة dml  مثل ال update,delete,insert 

 

 

ايضا عندما يجرى ان تعديلات او تغيير في الجدول فان تلك التغييرات لاتنعكس عىلى اي تغييرات في materialized view بعكس كما راينا في الفيو  .

 

يمكن ان نتسخدم هذا الامر لاجراء التعديلات على materialized view عندما تتم هناك اي تغييرات على الجدول :

 

('exec_dbms_mview.refresh('name_materialized view

 

ملاحظة: في حالة اذا لم يمكن المستخدم ليس له الصلاحية في انشاء materialized view يجب ان ينشى من ال system 

 

 

مثال :

 

ادخل الى conn system/manager

 

حيث manager كلمة المرور 

 

نعمل الامر الاول وهو لابد من عمل column  يحتوي على primary key كما اشارنا سابقا.

sgl>alter table scott.emp add primary key(empno); 

الامر الثاني نقوم الان بانشاء materialized view

create  materialized view mv1 as
select * from scott.emp; 

نقوم الان  بعرض materialized view وفقا كما انشاناه من الجدول emp داخل   scott  scheme

 

select * from mv1 

عندما ننفذ الكود السابق نرى ان الصفوف التي تعرض هي نفسها التي في  جدول emp وهي 14 صف

 

نقوم الان في الكود التالي بحذف الموظفين الذين وضيفتهم هي clerk .. طبعا الحذف سوف يكون من الجدول وليس من materialized view لانه لايدعم اوامر DML .

delete from scott.emp where job='CLERK';

في الكود التالي نعمل SELECT  من الجدول  EMP , ونرى كم عدد الصفوف التي حذفت سوف نرى انها 4 صفوف حذفت و10 صفوف باقية .

SELECT * from scott.emp;

الان في الكود التالي نعمل ايضا select  لكن ليس من الجدول وانما من materialized view ونرى ان الصفوف هي 14 صف واناه لم يجرى اي تغيير عليه عندما تم التغيير ع الجدول emp

 


select * from scott.emp;

نقوم الان بعمل اضافة صف جديد الى الجدول  emp ونرى هل سوف يتم اضافته الى materialized view ام لا ..

 



insert into scott.emp(empno,ename)values (1200,'ahmed');

عندما نعمل select من الجدول  emp   نرى انه قد تم اضافة صف جديد الى 10 صفوف السابقة وبذلك يصبح 11 صف 

select * from scott.emp;

الان نقوم بعمل select   لل materialized view هل سيصبح هناك صف زائد ام لا 14 صف السابقة .. بالطبع لا يمكن اي اضافة او تعديل او حذف ع materialized view

 


select * from mv1;

اذا كيف يمكن لنا ان نجعل نفس ماهو في الجدول يكون نفسه في materialized view

 

كما لشرت سابقا يمكن ان نتسخدم هذا الامر :

exec dbms_mview.refresh('mv1'); 

الان ممكن ان نعمل  select  للجدول  emp 

select * from scott.emp;

 سوف تكون المخرجات في materialized view هي نفسها التي الجدول

select * from mv1; 

اخيرا كيف يمكن ان نحذف materialized view

 

من خلال الصيغة العامة :

drop materialized view view_name;

ارجو ان يكون الشرح وافي وواصل بشكل مفهوم ...

 

لاتنسونا من دعائكم ..

 

 

رابط هذا التعليق
شارك

  • بعد 11 شهور...

 

اولا اشكرك على الشرح الرئع اخي العزيز

 

ولكن عندي استفسار 

كيف يتم استعراض هيكلية الفيو والتعديل عليها 

 

ولك جزيل الشكر والتقدير 

 

رابط هذا التعليق
شارك

  • بعد 10 شهور...

استعراض هيكلية view

بواسطة

desc view_name;

 

اما بالنسبة للسماح بالتعديل يتم انشاء view بهذه الطريقة

 

CREATE MATERIALIZED VIEW view_name FOR UPDATE AS
SELECT * FROM table_name;

رابط هذا التعليق
شارك

  • بعد 2 سنة...

استعراض هيكلية view

بواسطة

desc view_name;

 

اما بالنسبة للسماح بالتعديل يتم انشاء view بهذه الطريقة

 

CREATE MATERIALIZED VIEW view_name FOR UPDATE AS

SELECT * FROM table_name;

رابط هذا التعليق
شارك

  • بعد 4 شهور...

م هي التعليمه اللي تظهر لي كود انشاء ال view ?

السلام عليكم 

 

يمكنك مشاهدة كود انشاء ال VIEW من خلال الاستعلام التالي :

SELECT text
  FROM user_views
 WHERE view_name = 'YOUR VIEW_NAME'
 

كما يمكنك مشاهدة كود ال VIEW من خلال برنامج TOAD

 

بالتوفيق

رابط هذا التعليق
شارك

  • بعد 2 سنة...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية