Sequences
ال Sequences معناها السلسه المتعاقبه وهى عباره عن سلسله نقوم بانشائها تسير بخطوات منتظمه فمثلا ننشئ سلسله تبدأ ب 10 وتتزايد بمقدار خمسه فى كل خطوه لتكون 10 15 20 25 30 00000000
هذا هو المقصود ب ال Sequences وتستخدم فى ادخال البيانات للاعمده الرقميه طبع الاعمده تكون بياناتها متعاقبع اى متسلسله وليست بيانات الفارق بين كل قيمه واخرى فيها مختلف
تكوين ال Sequences
نحن قلنا انها عباره عن سلسله واى سلسله من الارقام لابد ان يكون لها بدايه تبدا منها وان نحدد لها مقدار كل خطوه وان نحدد لها اعلى قيمه تصل اليها او لا نحدد ونتركها مفتوحه
لذلك عند تكوين ال Sequences لابد ان نذكر كل هذا فى الكود
والكود يكون كالتالى
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
طبعا هنا بدانا ب CREATE ثم النوع وهو Sequences ثم اسم ال Sequences
اما الباقى
INCREMENT BY معناها ان السلسه ستتزايد بمقدار 10 فى كل خطوه
START WITH معناها ان السلسه ستبدا من الرقم 120
MAXVALUE معناها ان اقصى قيمه تصل اليها السلسه هى 9999 وبعدها تقف عن العمل ويمكن ان تكتب MAXVALUE NO
وهذا معناه ان السلسله ستكون مفتوحه اى لا نهاية لها
NOCACHE ال CACHE مسؤله عن ذاكرة الاوراكل والتخذين بها ف CACHE معناها ان القيم المتولده تظل بالذاكره و وهنا يتم تحديد عدد القيم التى تظل بالذاكره اما NOCACHE معنا يتم افراغ الذاكره ولا يتم تخزين اى قيم
NOCYCLE معناه ان السلسه تتوقف عن توليد القيم عن وصولها لحدها الاعلى او الادنى ويمكن ان نكتبها CACHE اى نجعلها تتوقف
هذه هى طريقة تكوين ال SEQUENCE
كيفية استخدام ال SEQUENCE فى ادخال القيم للجدول
يتم ذلك باستخدام CURRVAL
وهذه معناها اننا سناخذ القيمه الحاليه لل SEQUENCE
فمثلا لو انشانا سلسله تبدا ب 100 وكانت تتزايد بمقدار 10 فى كل خطوه وقمنا باستخدامها حتى القيمه 190 اى ان القيمه الموجوده حاليا هى 190 وهذه تسمى CURRVAL
NEXTVAL
واضح من الاسم اانا سنستخدم القيمه التاليه لاخر قيمه مستخدمه
ولاستخدام ال SEQUENCE فى ادخال البيانات نكتب اسم ال SEQUENCE ثم نقطه ثم نقوم بتحديد هل نريد القيمه الحاليه او التاليه
مثال
INSERT INTO departments(department_id,
department_name, location_id)
VALUES (dept_deptid_seq.NEXTVAL,
\'Support\', 2500);
هنا قمنا بعمل ادخال بيانات لجدول ال DEPARTMENTS واستخدما ال SEQUENCE التى اسمها dept_deptid_seq لادخال قيمه فى عمود DEPARTMENT_ID وحددنا له اننا سنستخدم القيمه التاليه فى السلسله
لاحظ جيدا كيفية استخدام ال SEQUENCE فى ادخال القيم فى الكود وكيفيه كتابتها
قد نلاحظ فى بعض الاحوال ان ارقام السلسه حدث بها فجوه اى هناك رقم او اكثر غير موجود فالمعروف ان السلسه ارقامها متتاليه ومنتظمه اما اذا وجدنا رقم غير موجود فهذا يرجع الى
1 / اننا قمنا بعد استخدام السلسله بعمل ROLLBACK اى تراجع للخلف وبذلك فان قيمه السلسله التى تم اضافتحا ستتلاشى وبذلك يكون هناك رقم غير موجود
2 / حدوث خلل بالسيستم مثل اغلاق الكمبيوتر او اى شئ اثناء الاستخدام للسلسه
3/ استخدام السلسه الواحده فى اكثر من جدول وبذلك ستتوزع قيم السلسله على الجداول وسنلاحظ ان كل جدول ارقام السلسله به ليست متتاليه وهناك ارقام غير موجوده فى النصف ستكون طبعا هذه الارقام موجوده فى الجداول الاخرى
التعديل على السلسله
ويتم ذلك باستخدام امر ALTER كما يلى
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
هنا بدلا من كتابة CREATE كتبنا ALTER ثم قمنا باعادة كتابة السلسله مره اخرى واجرينا اى تعديلات عليها
وبالطبع لم نستخدم CREATE لان السلسله موجوده اصلا وانما نقوم بالتعديل عليها فقط لذلك نستخدم ALTER
حذف السلسله
طبعا لحذف السلسله نستخدم DROP كما سبق وقلنا
DROP SEQUENCES dept_deptid_seq;
Indexes
ومعناها الفهرس وهو يستخدم لتسهيل عمل الاوراكل وسرعة الوصول الى البيانات ويقوم الاوراكل بتكوين ال Indexes
اوتوماتيكيا على الاعمده التى عليها CONSTRAINS من نوع PRIMARY KEY او UNIQUE
اما اذا اردنا انشاء Indexes يدويا نقوم بما يلى
نحدد العمود الذى سننشئ ال Indexes عليه ثم نكتب الكود والذى سيكون كما يلى
CREATE ثم INDEX ثم اسم ال INDEX ثم خى ثم اسم الجدول والعمود كما يلى
CREATE INDEX emp_last_name_idx
ON employees(last_name);
هنا انشانا INDEX على عمود LAST_NAME فى جدول EMPLOYEES
متى نحتاج الى انشاء INDEX
1/ عندما يكون العمود يحتوى على فروق كبيره بين قيمه او مدى واسع بين القيم
2/ ان يحتوى العمود على عدد كبير من قيم NULL
3 / عندما يكون عمود او اكثر يستعملان كثيرا فى عبارة WHERE او فى الربط
4/ ان يكون الجدول كبير وبياناته كثيره وفى حالة عمل استرجاع للبيانات يرجع حوالى من 2% الى 4% من بياناته
حذف ال INDEX
DROP INDEX AHMAD;
هنا حذفنا INDEX اسمه احمد
Synonyms
يستخدم ال Synonyms لعمل اسم مستعار للجدول فمثلا لدى جدول EMPLOYEESولاحظت ان اسمه كبير واجد صعوبه فى كتابته فى كل كود فيمكن ان اقوم بعمل اسم مختصر له باستخدام Synonyms
ويتم ذلك كما يلى
CREATE SYNONYM EMP
FOR EMPLOYEES;
هنا قمت بعمل اسم مختصر لجدول ال EMPLOYEESوجعلت اسمه EMP للتسهيل عليه عند كتابة الاكواد
حذف ال Synonyms
DROP SYNONYM EMP;
الاسئله
1. You need a sequence that can be used with the primary key column of the DEPT table. The
sequence should start at 200 and have a maximum value of 1,000. Have your sequence increment by 10. Name the sequence DEPT_ID_SEQ.
انشى سلسله تستخدم مع المفتاح الاساسىفى جدول DEPARTMENTS تبدا السلسله ب 200 واكبر قيمه تصل اليها هى 1000
وتتحرك بمقدار 10 فى كل خطوه واسمه السلسله هو DEPT_ID_SEQ
ثم استخدم السلسه فى ادخال قيمه الى الجدول
1. Create a nonunique index on the NAME column in the DEPT table.
انشئ فهرس INDEX على عمود DEPARTMENT_NAME فى جدول DEPARTMENTS
Create a synonym for your EMPLOYEES table. Call it EMP
انشئ اسم مستعار لجدول EMPLOYEESوسميه EMP
Question 1
// Create Sequence
CREATE SEQUENCE Dept_Id_Seq
INCREMENT BY 10
START WITH 200
MAXVALUE 1000
NOCACHE
NOCYCLE;
// Insert Into the table
INSERT INTO Deparments
( dep_id, ...
)
VALUES
(Dept_Id_Seq.nextval, ...
);
Question 2
// creating index on the department name column for the Department table
CREATE UNIQUE INDEX Departments_name_idx ON Departments(Department_Name);
Question 3
// createing synonym for the employees table
Create Synonym Emp For Employees;
--------------------------------------------------------------------------------