You are on page 1of 27

‫كتـــــب‬

‫مصطفي محمود عبدالسلم عطاال‬


‫لغة الستعلمات فـــــي‬
‫‪Oracle‬‬

‫قواعد البيانات‬

‫لغة معالجة البيانات‬ ‫لغة توصيف البيانات‬


‫‪DML‬‬ ‫‪DDL‬‬

‫‪ -1‬لغة توصيف البيانات ) ‪: ( DDL‬‬

‫‪DATA DEFINITIN LANUGE‬‬

‫حزف ‪Drop‬‬ ‫تعديل ‪Alter‬‬ ‫انشاء ‪Create‬‬


‫مستخدم ‪User‬‬ ‫مستخدم ‪User‬‬ ‫مستخدم ‪User‬‬
‫‪Table‬‬ ‫جدول‬ ‫‪Table‬‬ ‫جدول‬ ‫‪Table‬‬ ‫جدول‬
‫عارض ‪View‬‬ ‫عارض ‪View‬‬ ‫عارض ‪View‬‬
‫فهرسة ‪Index‬‬ ‫فهرسة ‪Index‬‬ ‫فهرسة ‪Index‬‬

‫‪ -2‬لغة التعامل مع البيانات ) ‪: ( DML‬‬

‫‪DATA MANIPULATION LANGUGE‬‬

‫‪ -‬إدراج سجـــل ‪Insert‬‬


‫‪ -‬تحديد سجلت ‪Select‬‬
‫‪ -‬تعديل سجلت ‪Update‬‬
‫‪ -‬حذف سجلت ‪Delete‬‬

‫‪ -3‬صلحيات المستخدمين ) ‪DCL ) : Data Control Language‬‬


‫‪ -‬اعطاء الصلحيات لمستخدم ‪.Grant‬‬
‫‪ -‬سحب الصلحية من مستخدم ‪.Revoke‬‬
‫أنواع البيانات والقيود داخل‬
‫‪Oracle‬‬
‫‪ -1‬أنواع البيانات ‪:‬‬

‫النصوص‬
‫نوع البيان‬ ‫الطــول‬ ‫الوصف‬
‫‪Char‬‬ ‫‪2000 Byte‬‬ ‫نصي غير مطاطي‬
‫‪VarChar‬‬ ‫‪4000 B‬‬ ‫نص غير مطاطي‬
‫‪Varchar2‬‬ ‫‪4000B‬‬ ‫نص مطاطي‬
‫‪Long‬‬ ‫‪2 GB‬‬ ‫نص طويل جدا َ‬

‫الرقام‬
‫نوع البيان‬ ‫الطـــول‬ ‫الوصف‬
‫‪Number‬‬ ‫‪38 Byte‬‬ ‫رقمي ول تزيد عن ‪ 38‬رقم‬
‫رقم حقيقي ) حيث أن ‪ I‬هو طول الرقم الصحيح ‪،‬‬
‫‪Number(I,J‬‬
‫‪(38,38) Byte‬‬ ‫أما ‪ J‬فهو طول الرقم الحقيقي ( ‪ ،‬كما أن ‪ I‬أو ‪ J‬ل‬
‫)‬
‫تزيد عن ‪ 38‬لكل واحد‬
‫‪Smallint‬‬
‫‪Int‬‬ ‫‪-‬‬ ‫رقم صحيح صغير الحجم‬
‫‪Integer‬‬
‫كسر عشري مع إجراء تقريب لعدد صحيح ويكون‬
‫‪Decimal‬‬ ‫)‪(X,y‬‬
‫صغير الحجم‬
‫‪Float‬‬ ‫‪126 Byte‬‬ ‫عدد حقيقي يصل الي ‪126‬‬
‫‪Real‬‬ ‫الريال ‪63 ،‬‬ ‫عدد حقيقي لعملة الريال يصل الي ‪ 63‬بايت‬

‫تاريخ‪/‬وقت‬
‫نوع البيان‬ ‫الطـــول‬ ‫الوصف‬
‫‪Date‬‬ ‫‪7B‬‬ ‫تاريخ‪/‬وقت‬

‫كائن ‪OLE‬‬
‫نوع البيان‬ ‫الطــــول‬ ‫الوصف‬
‫‪Long Raw‬‬ ‫‪2 GB‬‬ ‫كائن مرتبط ‪Ole‬‬
‫)الطول(‪Raw‬‬ ‫‪2000 Byte‬‬ ‫بيانات ثنائية‬
‫‪Clob‬‬ ‫‪-‬‬ ‫كائن كبير يعتمد علي المحارف‬
‫‪Bfile‬‬ ‫‪-‬‬ ‫ملف خارجي كبير‬
‫‪Nclob‬‬ ‫كائن كبير يعتمد علي المحارف وحيدة البايتات أو‬
‫‪-‬‬
‫متعددة البايتات‬
‫‪Blob‬‬ ‫‪-‬‬ ‫كائن ثنائي كبير‬

‫الترقيم التلقائي‬
‫التركيبة العامة ‪:‬‬
‫‪CREATE SEQUENCE‬‬ ‫إسم الترقيم‬
‫‪START WITH‬‬ ‫بداية الترقيم‬
‫‪INCREMENT BY‬‬ ‫مقدار الزيادة‬
‫; ‪NOMAXVALUE‬‬ ‫ليس هناك قيمة نهائية يقف عندها‬

‫مثـــال‬
‫‪Create Name :‬‬ ‫الجدول المستخدم‬
‫‪Create Table Emp(Enumber VarChar2(10),Ename‬‬ ‫;))‪VarCar2(50‬‬

‫‪Create Sequence :‬‬ ‫إنشاء مسلسل‬


‫‪Create Sequence List_EMP‬‬
‫‪START WITH‬‬ ‫‪1‬‬
‫‪INCREMENT BY‬‬ ‫‪1‬‬
‫; ‪NOMAXVALUE‬‬

‫كتابة قيم جديدة مع الترقيم التلقائي ‪Insert Record :‬‬


‫)'مصطفي محمود'‪Insert Into Emp Values(List_Emp.NextVal,‬‬

‫معرفة أكبر رقم في المسلسل ‪Select Max ID :‬‬


‫‪Select List_Emp.CurrVal From Emp‬‬

‫تعدادات المسلسل ‪:‬‬


‫‪ INCREMENT BY‬‬ ‫‪N:‬‬
‫تحدد مقدار الزيادة ‪ ،‬وفي حالة عدم تحديدها سيكون الزيادة بمقدار ) ‪.( 1‬‬
‫‪ START WITH‬‬ ‫‪N:‬‬
‫القيمة البدائية للترقيم التلقائي ‪ ،‬وفي حالة عدم تحديدة سيكون القيمة ) ‪.( 1‬‬
‫‪ MAXVALUE‬‬ ‫‪N:‬‬
‫أكبر رقم يمكن توليدة‬
‫‪ NOMAXVALUE‬‬ ‫‪:‬‬
‫تحدد أكبر قيمة ممكن الوصول إليها وهي تساوي ‪ 27^10‬للترتيب التصاعدي وتساوي ‪ 1-‬للترتيب التنازلي‬
‫‪ MINVALUE‬‬ ‫‪N:‬‬
‫تحدد أصغر رقم في السلسلة‬
‫‪ NOMAXVALUE‬‬ ‫‪:‬‬
‫تحدد أصغر قيمة ممكن الوصول إليها وهي تساوي ‪ 1‬للترتيب التصاعدي وتساوي –)‪ (27^10‬للترتيب‬
‫التنازلي‬
‫‪ CYCLE | NOCYCLE :‬‬
‫تحدد فيما إذا السلسلة ستستمر بتوليد القيم المتسلسلة حتى وإن بلغت الحد العلى أو الدنى المخصص لها أو أن‬
‫تتوقف عند ذلك الحد ‪ NOCYCLE‬وهو الخيار الفتراضي‬
‫‪ CACHE n | NOCACHE :‬‬
‫تحدد عدد القيم التي يقوم مزود أوراكل بتخصيصها مسبقًا ووضعها في الذاكرة ويقوم مزود أواكل افتراضيا‬
‫بتخصيص مسبق لـ ‪ 20‬قيمة‪.‬‬

‫‪Alter Sequence :‬‬


‫> إسم الفهرس< ‪Alter Sequence‬‬
‫> التعديلت<‬
‫‪ -2‬القيود علي حقول الجداول ‪:‬‬

‫هناك طريقتين لنشاء القيود علي الحقول ‪ ،‬وهي طريقة ‪ In Line‬و طريقة ‪ ، Out Line‬أما من المنطق‬
‫ن واحد ‪ ،‬كما هو موضح‬‫فمن المفضل استخدام ‪ Out Line‬لمرونتة والقدرة علي تعريف أكثر من حقل في آ ٍ‬
‫بالشكال والمثلة التالة ‪:‬‬
‫‪A- Not Null :‬‬
‫في حال الرغبة في عدم ترك الحقل فارغا ‪ ،‬ويستخدم تلقائيا عند إنشاء مفتاح رئيسي‬
‫‪In Line  X Char(10) Not Null‬‬

‫‪B- Unique :‬‬


‫عدم التكرار ‪ ،‬ومثال علي ذلك عند الرغبة في إنشاء علقة ‪ 1‬الي ‪1‬‬
‫‪In Line  X‬‬ ‫‪Char(10) Unique‬‬
‫)‪Out Line  Constraint UniX Unique(F1,F2,……,Fn‬‬

‫‪C- Default :‬‬


‫‪X‬‬ ‫)‪Char(10‬‬ ‫)‪Default(0‬‬ ‫القيمة المبدئية لحقل محدد‬

‫‪D- Check :‬‬


‫تستخدم في حال عدم إدخل قيمة أخري غير القيم المحددة مثل النوع ‪:‬‬
‫)‪In Line  Sex Char(4‬‬ ‫))'ذكر'‪',‬أنثي'( ‪Check ) Sex In‬‬
‫))'‪Out Line  Constraint CH_SEX Check(Sex In ('M','F‬‬

‫‪E- Primary Key :‬‬


‫تستخدم في حال الرغبة في إجراء مفتاح أساسي ‪:‬‬
‫)‪In Line  Enumber Varchar2(10‬‬ ‫‪Primary Key‬‬
‫)‪Out Line  Constraint PK_EMP Primary Key(Enumber‬‬

‫ملحوظة هامة‬
‫في حال الرغبة في إنشاء مفتاح رئيسي مركب ل يجوذ إستخدام الطريقةالولي بل الطريقة‬
‫الثانية وهي المفضلة والقوي كما يل ‪:‬‬
‫)‪Constraint ( NamePK ) Primary Key (Name Fields‬‬
‫حيث أن ‪:‬‬
‫‪ NamePK -‬هو إسم المفتاح كثابت أو معرف ل يجوز تكرارة ) ‪.) ID‬‬
‫‪ Name Fields -‬هي أسماء الحقول التي يتم الرغبة في إنشائها كمفتاح أساسي مركب ويتم‬
‫وضع فاصلة بين كل حقل ‪:‬‬
‫مثال‬
‫‪Create Table Phone‬‬
‫(‬
‫‪ID‬‬ ‫‪Number(10),‬‬
‫‪Enum‬‬ ‫‪Varchar2(10),‬‬
‫)‪Constraint FK_PHONE Foreign Key(ID,Enum‬‬
‫)‬
‫‪F- Foreign Key :‬‬
‫يستخدم هذا المر في إنشاء المفاتيح الخارجية ‪ ،‬مثال بين جدولين الموظف ‪ Emp‬والهاتف‬
‫‪ Phone‬في الجدول الموضح سابقا ‪:‬‬
‫‪ ) Add‬إسم الجدول ( ‪Alter Table‬‬
‫(‬
‫) إسم حقل العلقة الخارجية ( ‪ ) Foreign Key‬إسم العلقة ( ‪Constraint‬‬
‫) إسم جدول المفتاح الساسي ) إسم حقل المفتاح الساسي ‪References‬‬
‫‪On Delete Cascade‬‬
‫)‬
‫اساسيــــــات بـــــرمجة قواعد بيانات‬
‫‪Oracle‬‬
‫‪ -‬المعاملت داخل اوراكل ‪:‬‬

‫‪ -1‬المعاملت الحسابية ‪:‬‬


‫‪*,/,+,-‬‬
‫‪ -2‬المعاملت المنطقية ‪:‬‬
‫‪And , Or , Not‬‬
‫‪ -3‬معاملت المقارنة ‪:‬‬
‫=! ‪= , > , < , <= , >= , <> ,‬‬
‫‪ -4‬جمع النصوص ‪:‬‬
‫||‬
‫‪ -5‬علمات التنصيص ) "" ( ‪:‬‬
‫" " تستخدم عند اخراج للمستخدم قيمة نصية عادية مثل ][ داخل اكسيس ‪:‬‬
‫"اسم الموظف" ‪(Trim(Fname) || ' ' || Trim(Lname)) As‬‬

‫‪ -2‬دوال التعامل مع اوراكل ‪:‬‬

‫‪ -1‬الدوال الحرفية ‪:‬‬


‫الدااــــة ‪Function‬‬ ‫الوظيفة ‪Object‬‬
‫)‪LOWER(Exptition‬‬ ‫تحويل جميع الحروف الي حروف صغيرة ‪Smale‬‬
‫)‪UPPER(Exprition‬‬ ‫تحويل جميع الحروف الي حروف كبيرة ‪Capital‬‬
‫)‪INITCAP(Exprition‬‬ ‫تحويل الحروف الولي الي حروف كبيرة والباقي حروف‬
‫صغيرة‬
‫)‪CONCAT(Exp1,Exp2‬‬ ‫تستخدم لجمع نصين مثل ||‬
‫)‪SUBSTR(Exprition,M,L‬‬ ‫قطع جزء من عمود ‪ ،‬حيث أن ‪ M‬هي بداية النص أما ‪ L‬هي‬
‫طول النص المقطوع‬
‫)‪LENGTH(Exprition‬‬ ‫تستخدم لتحديد طول نص معين أو عدد حروفها‬
‫)‪INSTR(Exprition,M,1,Step‬‬ ‫تستخدم لتحديد مكان حرف معين في نص كامل ‪ ،‬وتستخدم‬
‫لجراء عملية البحث ‪ ،‬أما ‪ M‬فهو النص المرغوب البحث عنة ‪،‬‬
‫أما ‪ Step‬فهو ترتيب الحرف )الول – الثاني – الثالث ‪ ---‬الخ(‬
‫‪InStr('Mostapha','a',1,1) = 5‬‬
‫‪InStr('Mostapha','a',1,2) = 8‬‬
‫)'‪LPAD(Exp,N,'String‬‬ ‫ضبط طول نص ناحية اليمين وملء باقي النص برمز معين‬
‫)'‪RPAD(Exp,N,'String‬‬ ‫ضبط طول نص ناحية اليسار وملء باقي النص برمز معين‬
‫)‪TRIM(String‬‬ ‫محو المسافات الزائدة من يمين ويسار نص محدد‬
‫)‪LTrim(String‬‬ ‫محو المسافات من يسار النص‬
‫)‪RTrim(String‬‬ ‫محو المسافات من يمين النص‬
‫)'‪LTrim(String,'S Finde‬‬ ‫حزف من يسار النص ‪ String‬الموجود في ‪ S Finde‬مثال ‪:‬‬
‫‪LTRIM ('Ahmed','A') = hmed‬‬
‫)‪RTrim(String,S Finde‬‬ ‫نفس السابق ولكن من اليمين‬
‫)‪SoundEx(Fld Name‬‬ ‫عرض نص معين بحيث أن يكون اللفظ متشابة مثل ‪Ali – Ale‬‬
‫‪- Aly‬‬
‫مثال ‪:‬‬
‫)'‪Where SoundEx(Ename) = SoundEx('Ali‬‬
‫‪Like‬‬ ‫‪'%Like '%A‬‬ ‫دالة البحث المتقدم‬
‫يستخدم هذا المر في إستبدال نص بنص آخر مع حزف النص‬
‫المرغوب فيه مثل أمر ‪ Replace‬داخل ‪: VB‬‬
‫)‪Translate(String,X,Replace‬‬
‫مثال‬
‫‪Translate('Mostapha','ap','$@') = Most$@h$‬‬
‫تستخدم في إجراء بحث وإستبدال لحدي النصوص والمطابقة‬
‫)‪Replace(String,X,Replace‬‬ ‫تمامًا‬
‫‪Replace('Mostapha','ap','@@') = Most@@ha‬‬
‫‪CHR‬‬ ‫دالة تحويل الرقم الي المقابل لها حرفيًا‬

‫) أمثلة متنوعة (‬
‫‪Fname - Lname‬‬
‫= )'‪ LOWER('Ahmed‬‬ ‫‪ahmed‬‬
‫)'‪ UPPER('Ahmed‬‬ ‫=‬ ‫‪AHMED‬‬
‫= )'‪ INITCAP('ahmed‬‬ ‫‪Ahmed‬‬
‫‪ CONCAT('Ahmed' + ' ','Mahmod') = Ahmed Mahmod‬‬
‫‪ SUBSTR('ABCDEFGH', 2,4) = BCD‬‬
‫‪ LENGTH('Ahmed') = 5‬‬
‫‪ INSTR('ABCDEFGH','CD') = 3‬‬
‫‪ LPAD('Ahmed',10,'*') = *****Ahmed‬‬
‫@@@@@‪ RPAD('Ahmed',10,'@') = Ahmed‬‬
‫'‪ Trim(' Ahmed ') = 'Ahmed‬‬
‫قص الجزء الول حسب النص ‪Trim('S' From 'SSSami') = ami‬‬

‫‪ -2‬الدوال الرقمية ‪:‬‬


‫الدالة ‪Funcation‬‬ ‫الوظيفة ‪Object‬‬
‫)‪ROUND(Exp,n‬‬ ‫تستخدم لقص عدد معين من رقم عشري مع التقريب‬
‫)‪TRUNC(Exp,n‬‬ ‫تستخدم لقص عدد معين من رقم عشري دون التقريب‬
‫)‪Power(Fld,Number‬‬ ‫دالة الس مثل ^‬
‫)‪ABS(Number‬‬ ‫دالة الحد المطلق‬
‫)‪Ceil(Number‬‬ ‫تعطي العدد الكبر من المعطي بحيث أن يعطي عدد صحيح ‪،‬‬
‫مثال ‪ :‬العدد ‪3 = 2.255‬‬
‫)‪Floor(Number‬‬ ‫تعطي العدد الصغر من المعطي بحيث أن يعطي عدد صحيح ‪،‬‬
‫مثا ‪ :‬العدد ‪2 = 2.99‬‬
‫)‪SQRT(Number‬‬ ‫إيجاد الجزر التربيعي لرقم محدد‬
‫‪Sin‬‬ ‫الوظيقة جا‬
‫‪Cos‬‬ ‫الوظيفة جتا‬
‫‪Tan‬‬ ‫الوظيقة ظا‬
‫‪Mod‬‬ ‫‪(Mod(Field,Number‬‬ ‫باقي القسمة‬

‫) أمثلة متنوعة (‬
‫‪ ROUND(123.55905,2) = 123.56‬‬
‫‪ROUND(123.55905,0) = 124‬‬
‫)‪ TRUNC(123.55905,2‬‬ ‫‪= 123.55‬‬
‫)‪TRUNC(123.55905,0‬‬ ‫‪= 123‬‬
‫)‪ MOD(5,2‬‬ ‫‪=1‬‬

‫‪ -3‬دوال التاريخ والوقت ‪:‬‬


‫الدالـــــة ‪Function‬‬ ‫الوظيفة ‪Object‬‬
‫‪SYSDATE‬‬ ‫تحديد التاريخ الحالي المخزن داخل جهاز الحاسب‬
‫)‪MONTHS_BETWEEN(D1,D2‬‬ ‫عدد الشهر بين تاريخين‬
‫‪Next_Day‬‬ ‫التاريخ التايلي ‪:‬‬
‫‪- Next_Day('24/09/2000', 1) = 25/09/2000‬‬
‫‪- Next_Day('24/09/2000', 5) = 29/09/2000‬‬
‫)التاريخ(‪Last_Day‬‬ ‫اليوم الخير لشهر محدد ‪:‬‬
‫‪- Last_Day('24/09/2000') = 30/09/2000‬‬
‫‪- Last_Day('05/10/2000') = 31/10/2000‬‬
‫)‪ADD_MONTHS(D1,n‬‬ ‫إضافة ‪ n‬شهر إلى التاريخ ‪D1‬‬
‫‪ROUND(DATE , 'DAY' or‬‬ ‫في حالة ‪ Day‬يقوم التابع بتقريب التاريخ إلى تاريخ أقرب‬
‫) '‪'MONTH' or 'YEAR‬‬ ‫يوم أحد من التاريخ الحالي وفي حالة ‪ Month‬يقوم بتقريب‬
‫التاريخ إلى تاريخ أقرب أول شهر من التاريخ الحالي أما في‬
‫حالة ‪ Year‬فإنه يقرب التاريخ إلى أقرب أول يوم من أقرب‬
‫عام‬
‫‪TRUNC( DATE , 'DAY' or‬‬ ‫نفس السابق‬
‫) '‪'MONTH' or 'YEAR‬‬

‫‪ -4‬دوال التحويل ‪:‬‬


‫‪Function‬‬ ‫الدالـــــة‬ ‫الوظيفة ‪Object‬‬
‫‪TO_CHAR‬‬ ‫التحويل الي نص‬
‫‪TO_CHAR(24-9-2005,'YYYY/MM/DD')=2005-9-24‬‬
‫‪TO_DATE‬‬ ‫التحويل الي تاريخ‬
‫‪TO_NUMBER‬‬ ‫التحويل الي رقم‬

‫أمثلة متعددة‬
‫‪To_Char ‬‬
‫الطرق المتعدده لضبط التاريخ‬
‫الناتــــج‬ ‫الشكل‬
‫السنة كاملة ‪ ،‬ولظهار رقيمن فقط إدخل ‪ YY‬أو ‪ Y‬أو‬ ‫‪YYYY‬‬
‫‪YYY‬‬
‫الشهر ‪ ،‬أما ‪ fmmm‬تقوم بعرض التاريخ بدون الصفر‬ ‫‪MM – FMMM‬‬
‫اليسر مثال ‪:‬‬
‫'‪To_Char('24/09/1981','fmmm') = '9‬‬
‫رقم اليوم في السنة أو الشهر أو السبوع‬ ‫‪D - DD - DDD‬‬
‫الثانية‬ ‫‪SS‬‬
‫الساعة في اليوم و ترميز اليوم ‪ 12‬ساعة )‪ (12-1‬أو ‪24‬‬ ‫‪HH or HH12 or HH24‬‬
‫ساعة )‪(24-0‬‬
‫دقية‬ ‫‪MI‬‬
‫عرض اليوم كتابيًا ) السبت ‪ -‬الحد ‪( ----------- -‬‬ ‫‪DAY‬‬
‫صباحًا‬ ‫‪A‬‬
‫مساء‬ ‫‪M‬‬
‫عرض القرن‬ ‫‪SCC – CC‬‬
‫تستخدم هذه العلمات عند الرغبة في عرض نص معين‬ ‫"" علمات التنصيص‬
‫)'‪To_Char(SysDate,'"Day Is: "DD‬‬
‫تقوم بإظهار السنة كاملة كتابيًا ‪ ،‬وفي حالة كتابها حروف‬ ‫‪YEAR‬‬
‫صغيرة ترجع التاريخ مكتوب بالحروف الصغيرة‬
‫إظهار الشهر كتابيًا‬ ‫‪MONTH – MON‬‬
‫لظهار اليوم كتابيًا ومختصر‬ ‫‪DY‬‬
‫يعرض ربع السنة‬ ‫‪Q‬‬
‫‪BC‬‬
‫رقم الشهر بالترميز الروماني‬ ‫‪RM‬‬
‫رقم السبوع في السنة أو الشهر‬ ‫‪W – WW‬‬
‫عدد الثواني منذ منتصف الليل‬ ‫‪SSSSS‬‬
‫عرض الشهر كتابيًا ‪ ،‬ولكنة بالتنسق الفرعوني‬ ‫‪Month‬‬

‫الطرق المتعددة لضبط الرقام‬


‫تكرار هذا الرقم يمثل عدد الخانات التي تظهر ‪ ،‬ويترك مسافات فارغة في حالة‬
‫‪9‬‬ ‫عدم وجود الرقم ‪ ،‬وفي حالة إنقاص العدد عن المخزن بالخلية يقوم بإعطاء‬
‫علمة ‪#‬‬
‫‪0‬‬ ‫نفس السابق ‪ ،‬ولكنة يترك أصفار إذا لم يجد الرقم‬
‫‪099‬‬ ‫يعني ظهور الرقم وقبلة صفر‬
‫‪990‬‬ ‫يعني ظهور صفرا إذا كانت القيمة معدومة‬
‫‪$99‬‬ ‫إظهار علمة ‪ $‬قبل الرقم ‪ ،‬وهي علمة الدولر‬
‫‪.‬‬ ‫إظهار العلمة العشرية‬
‫‪,‬‬ ‫إظهار فواصل بين كل ثلثة أرقام ) فاصلة اللوف (‬
‫‪MI‬‬ ‫إظهار علمة السالب يمين الرقم إذا كان سالبا‬
‫‪L‬‬ ‫رمز الفاصلة العائمة ) ج‪.‬م(‬

‫‪ -5‬دوال أخري لوراكل ‪:‬‬


‫‪ -‬الفرز التصاعدي والتناذلي ‪:‬‬
‫‪ ) ASC‬اسماء الحقول ( ‪Order By‬‬ ‫فرز تصاعدي‬
‫‪ ) Desc‬اسماء الحقول ( ‪Order By‬‬ ‫فرز تناذلي‬
‫‪ -‬دوال الختبارات ‪:‬‬
‫‪Is Null , Null , Not Null‬‬

‫‪ -‬دالة محو تكرار البيانات ‪:‬‬


‫‪Distinct‬‬ ‫‪‬‬
‫تستخدم هذه الدالة في عدم تكرار بيانات محددة‬
‫مثال‬
Select Distinct Ename From Emp;

: ‫ دالة التحقق من قيمة الحقل هل هي فارغة أم ل‬-


NVL 
Select Nvl(Sex,' Not Field ') As Esex From Emp
‫ إذا كان الحقل به قيمة سيخرجها كما هي‬-
.Not Field ‫ إذا كان الحقل ليس به أي قيمة سيقوم بإخراج‬-

: RowNum ‫ دالة عرض الترتيب الحالي لكل سجل‬-


Select RowNum,Enumber From Emp;
‫الناتج‬
RowNum Enumber
----------------------------------
1 15
2 16
3 17
4 18
5 19
: ‫ويمكن أيضًا من خلل هذه الدالة يتم عرض أول أو آخر سجل والتنقل بين السجلت سجل سجل كما يلي‬
Move First :
Select Emp_ID,Emp_Name
From (Select Emp_ID,Emp_Name
From Emp
Order By Emp_ID)
Where RowNum <= 10
Order By Emp_ID;

Move Last :
Select Emp_ID,Emp_Name
From (Select Emp_ID,Emp_Name
From Emp
Where Emp_ID < 41
Order By Emp_ID Desc) Emp
Where RowNum <= 10
Order By Emp_ID

Move Next :
Select Emp_ID,Emp_Name
From (Select Emp_ID,Emp_Name
From Emp
Where Emp_ID > 10
Order By Emp_ID)
Where RowNum <= 10;

Move Back :
Select Emp_ID,Emp_Name
From (Select Emp_ID,Emp_Name
From Emp
Order By Emp_ID Desc) Emp
‫‪Where RowNum <= 10‬‬
‫‪Order By Emp_ID‬‬

‫‪ -‬دالة معرفة رقم الـ ‪ Address ID‬لكل سجل ‪:‬‬

‫‪RowID‬‬

‫دالة إيجاد اللوغاريتمات ‪LN ‬‬

‫;‪Select Ln ( 50 ) From Tab‬‬

‫‪ -6‬دوال الشرط ) تدفق البرامج ( ‪:‬‬

‫فرضًا أن لدينا جدول يمثل كيان الموظف‬


‫‪Employee‬‬
‫‪Enumber‬‬ ‫‪Ename‬‬ ‫‪Sex‬‬ ‫‪Salary‬‬
‫‪1‬‬ ‫مصطفي‬ ‫‪1‬‬ ‫‪500‬‬
‫‪2‬‬ ‫أحمد‬ ‫‪1‬‬ ‫‪900‬‬
‫‪3‬‬ ‫فكري‬ ‫‪1‬‬ ‫‪1500‬‬
‫‪4‬‬ ‫سارة‬ ‫‪2‬‬ ‫‪450‬‬
‫‪5‬‬ ‫مروة‬ ‫‪2‬‬ ‫‪1250‬‬
‫‪6‬‬ ‫مجدي‬ ‫‪1‬‬ ‫‪950‬‬

‫‪Case‬‬ ‫‪‬‬
‫)‪(1‬‬
‫عرض بيانات كافة الموظفين مع تحديد النوع‬
‫‪' End) As Esex‬أنثي' ‪' Else‬ذكـر' ‪Select Enumber,Ename,(Case When Sex='1' Then‬‬

‫)‪(2‬‬
‫عرض رقم وإسم وراتب الموظف مع تحديد هل الراتب‬
‫ضعيف‪/‬متوسط‪/‬مرتفع‬
‫‪' When‬ضعيف' ‪Select Enumber,Ename,Salary,(Case When Salary<=500 Then‬‬
‫‪' End) As LevelSalary‬مرتقع' ‪' Else‬متوسط' ‪Salary <=1000 Then‬‬

‫)‪(3‬‬
‫عرض الموظفين الذين يعملون براتب ‪ 950 ، 450 ، 500‬بشرط معين‬
‫‪Select Enumber,Ename,Salary,(Case When Salary In(500,450,950) Then‬‬
‫‪' End) As XX‬الراتب المحدد'‬
‫‪DeCode ‬‬
‫تستخدم هذه الدالة في إجراء شرط مثل ‪IF<Exp>Then‬‬
‫مثال‬
‫‪')) AS Esex‬ذكـر'‪' ,'2' ,‬أنثي' ‪(DeCode(Sex, '1',‬‬
‫‪ -7‬دوال المجال التجميعي ‪:‬‬
‫الدالة ‪Function‬‬ ‫الوظيفة ‪Opject‬‬
‫‪Sum‬‬ ‫إيجاد مجموع عمود محدد‬
‫‪Avg‬‬ ‫إيجاد متوسط عدد محدد‬
‫‪Max‬‬ ‫إيجاد أكبر قيمة‬
‫‪Min‬‬ ‫إيجاد أقل قيمة‬
‫‪Count‬‬ ‫إيجاد عدد السجلت‬
‫‪Stddev‬‬ ‫دالة النحراف المعياري‬
‫‪Variance‬‬ ‫دالة التشتت أو التباين‬

‫ملحوظة‬
‫في حالة الرغبة في إجراء تحديد أكبر أو أقل لحقل نصي ‪ ،‬يقوم بعرض أكبر أو أصغر حقل‬
‫نصي حسب ترتيب الحروف ‪ ،‬مثال‪.‬‬
‫‪(Ename(Ahmed,Mohamed‬‬
‫‪Select Max(Ename) as xMax,Min(Ename) ax xMin‬‬
‫‪Max  Mohamed‬‬
‫‪Min  Ahmed‬‬

‫‪ -8‬دوال أخري ‪:‬‬


‫‪Between ‬‬
‫يستخدم هذا المر في البحث عن مجموعة من السجلت بين رقمين أو تاريخين ‪ ،‬مثال ‪:‬‬
‫‪1- Where Enumber Between 5 And 11‬‬
‫'‪2- Where Bdate Between '#24/9/2005#' And '#24/9/2007#‬‬
‫التعامل مع المستخدمين داخل‬
‫‪Oracle‬‬
‫‪ -1‬انشاء مستخدم جديد ‪:‬‬
‫) نظام المن ( ‪) Identifed By‬اسم المستخدم ( ‪SQL> Create User‬‬

‫مثال‬
‫‪SQL> Create User Ahmed Identified By XXX‬‬

‫‪ -2‬تعديل مستخدم ‪:‬‬


‫هذا المر يستخدم في تعديل كلمة السر الي أخري كما يلي ‪:‬‬
‫‪SQL> Alter User Ahmed Identified By RRR‬‬
‫تم تحويل نظام المن من ‪ XXX‬الي ‪RRR‬‬

‫ملحوظة هامة ‪:‬‬


‫المر السابق يقوم بتعديل كلمة المرور ‪ ،‬ويجب أن يبدأ بحرف ‪ ،‬ويجب أيضًا أن تكون من‬
‫خارج المستخدم أي من مدير قاعدة البيانات ‪.DBA‬‬

‫أما إذا كنت ترغب في تغيير كلمة المرور من داخل الـ ‪ ، User‬ويبدأ برقم قم بالخطوات‬
‫التالية ‪:‬‬
‫‪SQL> Password‬‬
‫*** ‪OldPassword:‬‬
‫*** ‪NewPassword:‬‬
‫*** ‪Retype new password:‬‬

‫‪ -3‬حذف مستخدم ‪:‬‬


‫‪SQL> Drop User Ahmed Cascade‬‬
‫تم حذف المستخدم ‪ ، Ahmed‬ولكن يتم وضع أمر ‪ Cascade‬في بعض الحوال بمجرد‬
‫طلب نظام ‪ Oracle‬بذلك ‪.‬‬

‫‪ -4‬منح صلحيات المستخدم ‪:‬‬


‫يجب عند إنشاء مستخدم جديد إعطاء صلحية الربط مع قاعدة البيانات كما يلي ‪:‬‬
‫]إسم المستخدم[ ‪SQL> Grant Connect,Resource To‬‬

‫حيث أن‬
‫‪Connect‬‬ ‫‪‬‬ ‫التصال مع قاعدة البيانات‬
‫‪Resource‬‬ ‫‪‬‬ ‫منح كافة الجرائات في ‪ DDL‬أول ‪DML‬‬
‫‪Create Session‬‬ ‫‪‬‬ ‫القدرة علي التصال بقاعدة البيانات‬
‫‪Create Table‬‬ ‫‪‬‬ ‫القدرة علي إنشاء الجداول‬
‫‪Create Sequence ‬‬ ‫إنشاء تتابع‬
‫‪Create View‬‬ ‫‪‬‬ ‫إنشاء عارض‬
‫‪Create Procedure‬‬ ‫‪‬‬ ‫إنشاء روتين‬
‫‪Create Function‬‬ ‫‪‬‬ ‫إنشاء إجراء‬
‫‪Create Package‬‬ ‫‪‬‬ ‫إنشاء حزمة‬
‫‪Create Trigger‬‬ ‫‪‬‬ ‫إنشاء أزندة‬
‫‪DBA‬‬ ‫‪‬‬ ‫مدير قواعد البيانات ‪ ،‬مثل ‪System‬‬

‫‪ -5‬إلغاء منح الصلحية ‪:‬‬


‫عند سحب الصلحية من المستخدم يتم كما يلي ‪:‬‬
‫] إسم المستخدم [ ‪SQL> Revoke Connect,Resource From‬‬

‫الصلحيات علي مستوي‬


‫الكائنات‬
‫المقصود بالصلحيات علي مستوي الكائنات هو الكائنات الموجودة داخل إحدي قواعد‬
‫البيانات مثل ) الجداول ‪ -‬العارض ‪ -‬الروتين ‪ ---- -‬الي آخرة ( ‪ .‬والشكل العام لعطاء‬
‫صلحية لي كائن كما يلي ‪:‬‬
‫]) ] أسماء الحقول [ (‪ Columnts‬نوع المتياز[ ‪Grant‬‬
‫‪On‬‬ ‫] ) إسم الكائن الذي يتم التطبيق علية ) جدول أو عارض [‬
‫‪To‬‬ ‫] إسم المستخدم أو كتابة أمر ‪ Public‬للتطبيق علي كافة المستخدمين [‬

‫كما أن يتمكن مشرف قواعد البيانات ‪ DBA‬بمنح الصلحيات التالية ‪:‬‬


‫‪Select‬‬ ‫التحديد ‪‬‬
‫‪Insert‬‬ ‫الضافة ‪‬‬
‫‪Update‬‬ ‫التحديث ‪‬‬
‫‪Delete‬‬ ‫الحزف ‪‬‬
‫مثال لحدي المستخدمين ‪:‬‬
‫‪User name Is : MMA/MMA‬‬
‫‪Tables‬‬ ‫‪: Emp‬‬

‫‪Grant Select,Update,Insert,Delete‬‬
‫‪On Emp‬‬
‫‪To System,Manager‬‬

‫سحب الصلحيات للجدول ‪:‬‬


Revoke Select,Update,Insert,Delete
On Emp
From MMA

: Role ‫بناء كائنات من نوع‬

: ‫ والشكر العام له‬، ‫ ما هو إل وعاء يستخدم لتخزين الصلحيات‬Role ‫الكائن‬


Create Role <Name> Identified By <password>

: ‫مثال‬
Create Role XX;
Grant Connect,Resource To XX;

: ‫ يمكن من خلل المر التالي‬، ‫ولستخدام هذا الكائن‬


Grant XX To DB_Man;

‫ لغة توصيف البيانات‬: ‫اوًل‬


‫التعامل مع الجداول داخل‬
‫‪Oracle‬‬
‫‪ -1‬انشاء جدول جديد ‪:‬‬

‫الصورة العامة لتصميم جدول كما يلي ‪:‬‬


‫) إسم الجدول ( ‪Create Table‬‬
‫(‬
‫اسم الحقل ( (‬ ‫) نوع الحقل (‬ ‫))القيود‬
‫;)‬

‫أو يمكن تصميم الجدول في الشكل التالي ‪:‬‬


‫) اسم الجدول ( ‪Create Table‬‬
‫(‬
‫اسم الحقل ( (‬ ‫‪ ) ),‬نوع الحقل‬
‫) اسم المتغير ( ) اسم القيد ( ) الحقول ( ‪Constraint‬‬
‫;)‬

‫مثال ) جدول القسم (‬


‫‪Section‬‬
‫اسم الحقل‬ ‫نوع البيان‬ ‫ملحظات‬
‫‪Snumber‬‬ ‫نص‬ ‫رقم القسم ‪ /‬مفتاح اساسي‬
‫‪Sname‬‬ ‫نص‬ ‫اسم القسم‬
‫‪Manager‬‬ ‫نص‬ ‫مدير القسم ‪ /‬غير متكرر‬
‫‪Sadd‬‬ ‫نص‬ ‫ملحظات اضافية‬

‫كتابة الكود‬
‫‪Create Table Section‬‬
‫(‬
‫‪Snumber‬‬ ‫‪Varchar2(10),‬‬ ‫‪--‬رقم القسم‪--‬‬
‫‪Sname‬‬ ‫‪Varchar2(50),‬‬ ‫‪--‬إسم القسم‪--‬‬
‫‪Manager‬‬ ‫‪Varchar2(10),‬‬ ‫‪--‬مدير القسم‪--‬‬
‫‪Sadd‬‬ ‫‪Varchar2(500),‬‬ ‫‪--‬ملحظات‪--‬‬
‫‪Constraint PK_SECTION Primary Key ( Snumber ),‬‬
‫)‪Constraint UQ_SECTION Unique ( Manager‬‬
‫;)‬

‫‪ -2‬تعديل الجداول ‪:‬‬


‫كي يتم تعديل جدول يتم التعامل مع امر ‪ ، Alert‬وهناك شكلين لتعديل احدي الجداول ‪،‬‬
‫مع الفتراض ان لدينا جدول خاص بالموظف ‪: Employee‬‬
‫‪Enumber‬‬ ‫)‪Varchar2(10‬‬ ‫‪PK‬‬
‫‪Ename‬‬ ‫)‪Varchar2(50‬‬
‫‪Sex‬‬ ‫)‪Char(1‬‬
‫‪Salary‬‬ ‫)‪Number(10.5‬‬

‫‪ -1‬تعديل بيانات وطول وقيود حقل معين ‪ ، Modify‬والشكل العامل لها هو ‪:‬‬
‫) اسم الحقول والتعديلت( ‪) Modify‬اسم الجدول( ‪Alter Table‬‬

‫ومثال علي ذلك يجب وضع طول حقل الراتب ‪ Salary‬مرن اكثر من ذلك ‪ ،‬وكذلك حقل‬
‫اسم الموظف ‪ Ename‬كما يلي ‪:‬‬
‫‪SQL> Alter Table Employee Modify(Ename Varchar2(60),Salary‬‬
‫;))‪Number(30,5‬‬

‫‪ -2‬اضافة حقل جديد أو علقة داخل جدول مصمم سابقًا والشكل العام لها هو‪:‬‬
‫) الحقول المضافة ( ‪ ) Add‬اسم الجدول ( ‪Alter Table‬‬

‫وعلي سبيل المثال يجب في جدول الموظف يجب ان يحتوي علي حقل العنوان‬
‫‪ ، Address‬فيتم انشائها كما يلي ‪:‬‬
‫) )‪SQL> Alter Table Employee Add( Address Varchar2(500‬‬

‫‪ -3‬تغيير اسم جدول ‪:‬‬


‫> اسم الجدول الجديد < ‪ > Rename To‬اسم الجدول القديم < ‪SQL> Alter Table‬‬

‫طريقة أخري لتعديل جدول أو عارض‬


‫>السم الجديد< ‪> To‬إسم الجدول أو العارض< ‪SQL> Rename‬‬

‫‪ -4‬حذف حقل من حقول الجدول ‪:‬‬


‫) أسماء الحقول التي يتم حزفها ( ‪ > Drop‬إسم الجدول < ‪SQL> Alter Table‬‬
‫حذف علقة من العلقات‬
‫>إسم العلقة < ‪ > Drop‬إسم الجدول < ‪SQL> Alter Table‬‬
‫‪Alter Table Emp Drop Constraint FK_EMP Cascade‬‬
‫‪ -3‬حذف الجداول ‪:‬‬

‫يستخدم هذا المر في حذف احدي الجداول الغير مرغوب فيها ‪ ،‬والشكل العام لها ‪:‬‬
‫) اسم الجدول ( ‪SQL> Drop Table‬‬
‫ومثال علي ذلك يتم الرغبة في حذف جدول تحت اسم ‪: XX‬‬
‫; ‪SQL> Drop Table XX‬‬

‫‪ -4‬إضافة تعليق لجدول أو لحقل محدد داخل الجدول ‪:‬‬


‫التعليق'' ‪> Is‬إسم الجدول< ‪Comment On Table‬‬ ‫للجدول‬
‫'التعليق' ‪#> Is‬إسم الجدول<‪>.‬إسم الحقل< ‪Comment On Column‬‬

‫لمعرفة التعليقات المضافة علي الجداول و الحقول كما يلي ‪:‬‬


‫عرض تعليقات الحقول علي مستوي قاعدة البيانات ‪ALL_COL_COMMENTS ‬‬
‫عرض تعليقات الحقول علي مستوي المستخدم ‪USER_COL_COMMENTS ‬‬
‫عرض تعليقات الجداول علي ستوي قاعدة البيانات ‪ALL_TAB_COMMENTS ‬‬
‫عرض تعليقات الجداول علي مستوي المستخدم ‪USER_TAB_COMMENTS ‬‬

‫‪ -4‬إنشاء مرادف ‪: SYNONYM‬‬

‫ل من إسم الجدول‬
‫يستخدم هذا المر في إنشاء إسم آخر لحدي الجداول يمكن إستخدامها بد ً‬
‫الحقيقي ‪ ،‬مثال ‪:‬‬
‫‪Table‬‬ ‫‪ Employee‬‬
‫‪SYNONYM  Emp‬‬

‫بناء الصيغة العامة ‪:‬‬


‫‪SQL> Create Or Replace SYNONYM‬‬ ‫‪Emp‬‬
‫;‪For Employee‬‬

‫;‪SQL> Select * From Emp‬‬

‫‪SQL> Drop SYNONYM‬‬ ‫‪Emp‬‬

‫كما أن هذا المرادف أيضًا يمكن إنشاء مرادف عام علي مستوي أوراكل وتستخدم في جميع‬
‫المستخدمين كما يلي ‪:‬‬
‫‪ -1‬قم بالدخول علي مستخدم النظام ‪.System/Manager‬‬
‫‪ -2‬قم بكتابة المر التالي ‪:‬‬
‫‪SQL> Create Public SYNONYM‬‬ ‫‪Emp‬‬
‫‪For MMA .Employee‬‬

‫كما أنه أيضًا يمكن إنشاء علقة بين الجدول الحقيقي و الجدول الوهمي لمعرفة المشرف ‪ ،‬مثال‬
‫علي ذلك ‪:‬‬
‫‪SQL> Alter Table Employee Add‬‬
‫(‬
‫)‪Constraint FK_EMP_SuperEmp Foreign Key(SuperEmp‬‬
‫‪References Emp(Enumber) On Delete Cascade‬‬
‫)‬

‫إنشاء الفهارس داخل‬


‫‪Oracle‬‬
‫من أهم فوائد الفهارس هو العمل علي زيادة سرعة البحث داخل قاعدة البيانات ‪ ،‬ويعمل‬
‫عند وجود كم هائل من البيانات ‪.‬‬
‫متي نقوم بإنشاء الفهرس ‪:‬‬
‫نستخدم الفهرس على العمود الذي يستخدم بشكل كبير ضمن عبارة ‪ WHERE‬أو في شرط‬ ‫‪.1‬‬
‫الربط ‪. Join condition‬‬
‫على العمود الذي يحوي مجال واسع من القيم‪.‬‬ ‫‪.2‬‬
‫على العمود الذي يحوي عدد كبير من القيم الفارغة‪.‬‬ ‫‪.3‬‬
‫على الجدول الكبير ) الضخم ( والمطبق عليه استفسارات ُيتوقع أن تعيد أقل من ‪ 2‬إلى ‪% 4‬‬ ‫‪.4‬‬
‫من إجمالي الصفوف ‪.‬‬

‫متي ل نقوم بإنشاء الفهرس ‪:‬‬


‫الجدول الصغير ‪.‬‬ ‫‪.1‬‬
‫على أعمدة ل تستخدم في الغالب كشرط ضمن الستفسار ‪.‬‬ ‫‪.2‬‬
‫أغلب الستفسارات المتوقع أن تعيد أكثر من ‪ 2‬إلى ‪ % 4‬من إجمالي الصفوف ‪.‬‬ ‫‪.3‬‬
‫الجدول الذي يتم تحديثه كثيرًا ‪.‬‬ ‫‪.4‬‬

‫فرضًا أن لدينا جدول خاص بالموظف ‪ ، Emp‬يحتوي علي رقم ‪ Enumber‬واسم‬


‫‪ Ename‬ونوع ‪ Sex‬وراتب ‪ ، Salary‬فيتم إنشاء فهرس علي الحقل ) رقم و اسم الموظف (‪:‬‬

‫‪ -1‬إنشاء فهرس جديد ‪:‬‬


‫) اسم الجدول ) الحقول ‪ On‬اسم الفهرس ‪SQL> Create Index‬‬

‫مثال علي‬
‫رقم واسم الموظف‬

‫) ‪SQL> Create Index I_EMP_1 On Emp( Enumber,Ename‬‬

‫‪ -2‬حذف فهرس ‪:‬‬


‫اسم الفهرس ‪SQL> Drop Index‬‬

‫أنواع الفهارس داخل الوراكل‬

‫‪ -1‬فهرس وحيد وغير متكرر للصفوف ‪:‬‬


‫)?‪Create Unique Index <IN Name> On <Table Name>(F1,F2,F‬‬
‫‪ -2‬فهرس متعدد ومتكرر ‪:‬‬
‫)?‪Ceate Index <IN Name> On <Table Name>(F1,F2,F‬‬
‫‪-3‬‬
‫)?‪Create Index Bitmap <In Name> On <Table Name>(F1,F2,F‬‬
‫إنشــــــــاء العارض ‪View‬‬
‫داخل ‪Oracle‬‬
‫العارض هو جدول اعتباري يستخدم في حفظ استعلمات من نوع تحديد ‪ Select‬تعتمد‬
‫علي جداول اخري مثل الستعلمات داخل ‪: Access‬‬

‫‪ -1‬إنشاء عارض جديد ‪:‬‬

‫) استعلم العارض ( ‪ As‬اسم العارض ‪Create View‬‬

‫مثــــــال‬
‫;) ‪SQL> Create View ShowAllEmp As ( Select * From Emp‬‬

‫‪ -2‬تعديل عارض ‪:‬‬


‫) التعديلت ( ‪ As‬اسم العارض ‪Create Or Replace View‬‬
‫ملحوظة ‪ ،‬أمر ‪ Replace‬ليس لقامة تعديل بل سيتم إنشاء العارض وفي حالة وجودة يقوم‬
‫الوراكل بحذفة قبل إنشائة مرة أخري‪.‬‬

‫‪ -3‬حذف عارض ‪:‬‬

‫;اسم العارض ‪Drop View‬‬


‫‪ -4‬اعادة تسمية عارض ‪:‬‬
‫> السم الجديد < ‪ > To‬إسم العارض< ‪Rename‬‬

‫‪Rename ListAllEmp To ReportEmp‬‬

‫‪ -5‬إضافة تعليق لعارض أو لحقل به ‪:‬‬


‫التعليق'' ‪> Is‬إسم العارض< ‪Comment On Table‬‬ ‫للجدول‬
‫لحقل '‪Comment On Column <VieName>.<Fname> Is 'Com‬‬
‫ثانيا ‪ :‬لغة التعامل مع‬
‫البيانات‬

‫‪DML‬‬
‫التعامل مع الستعلمات داخل‬
‫‪Oracle‬‬

‫‪ -1‬استعلم تحديد ‪:‬‬

‫الحقول ‪Select‬‬
‫اسماء الجداول والربط ‪From‬‬
‫وضع الشرط علي حقول ذات الصف الواحد ‪Where‬‬
‫وضع حقول تجميع حسب ‪Group By‬‬
‫وضع الشروط علي حقول صفوف المجمعة ‪Having‬‬
‫أسماء الحقول المفرزة ‪Order By‬‬

‫ملحظات هامة ‪:‬‬


‫‪% ‬‬
‫يستخدم عند أمر ‪ Like‬عند البحث عن سجل يبدأ بحف معين ‪ ،‬مثال علي ذلك ‪:‬‬
‫'‪Where Ename Like 'M%‬‬
‫هذا الستعلم يقوم بإرجاع السجلت التي تبدأ بحرف ‪ M‬في الحقل ‪Ename‬‬
‫'‪Where Ename Not Like 'M%‬‬
‫عرض كافة السجلت عدا السجلت التي تبدأ بحرف ‪ M‬في حقل ‪Ename‬‬
‫‪In ‬‬
‫يستخدم هذا المر لعرض سجلت محدد‬
‫)‪Where Enumber In(1,2,3‬‬
‫يعرض هذا المر السجلت المكونة من ‪ 3 ، 2 ، 1‬من الحقل ‪Enumber‬‬
‫‪DISTINCT ‬‬
‫يستخدم هذا المر عند الرغبة في اظهار حقول غير متكررة‬
‫)‪Select DISTINCT(Salary‬‬
‫يعرض هذا الستعلم كافة حقول ‪ Salary‬وعند تكرار راتب أكثر من مرة يتم عرضة‬
‫مرة واحدة فقط ل غير‬

‫السماء المستعارة‬
‫ل من اسم الجدول تمامًا مثل السماء المستعارة للحقول أو العمدة ‪ .‬تساعد‬
‫يمكنك استخدام اسم مستعار للجدول بد ً‬
‫السماء المستعارة للجداول في جعل كود الـ ‪ SQL‬أصغر والذي يستعمل ذاكرة أقل ‪.‬‬
‫‪Select x.Enumber,x.Ename,x.Sex‬‬
‫‪From Employee As x‬‬

‫‪ -2‬استعلم حـــــذف ‪:‬‬


‫الشرط ‪ Where‬إسم الجدول ‪Delete From‬‬

‫‪ -3‬استعلم تعديـــــل ‪:‬‬


‫> اسم الحقل < = > القيمة المعدلة < ‪ > Set‬اسم الجدول < ‪Update‬‬

‫مثال‬
‫‪Update Employee Set Salary=Salary + (Salary * 0.10) Where‬‬
‫'‪Ename Like 'M%‬‬
‫مثال آخر‬
‫)'‪Update Employee Set (Salary,Sex)=(500,'1‬‬

‫‪ -4‬إستعلم إضافـــة ‪:‬‬


‫) البيانات ( ‪ ) Values‬اسم الجدول ) الحقول ‪Insert Into‬‬

‫مثال‬
‫)‪Insert Into Emp(Enumber,Ename,Salary) Values('1','Ahmed',500.25‬‬

‫‪ -5‬استعلم إنشاء جدول ‪:‬‬


‫‪SELECT * INTO XXX‬‬
‫‪FROM Emp‬‬
‫حيث أن ‪:‬‬
‫* ‪Select‬‬ ‫‪‬‬ ‫الحصول التي يتم إخراجها من الجداول المحددة‬
‫‪Into XXX ‬‬ ‫هو الجدول الذي يتم إنشائة‬
‫‪From Emp ‬‬ ‫الجداول التي يتم إخراج البيانات من داخلها‬

‫‪ -6‬إستعلم إلحاق ‪:‬‬


‫‪Insert Into XXX‬‬
‫‪Select * From Emp‬‬
‫حيث أن ‪:‬‬
‫‪Insert Into XXX‬‬ ‫هو الجدول الذي سيتم الضافة إليه ‪‬‬
‫هي جداول وحقول المصدر ‪Select * From Emp  Source‬‬
‫تصدير‪/‬استيراد البيانات‬

‫التصدير والستيراد في وضع المستخدم ‪:‬‬


‫‪ -1‬تصدير بيانات ‪:‬‬
‫‪Exp <>/<> File=<>.sql Log=<>.log‬‬
‫‪ -2‬إستيراد البيانات ‪:‬‬
‫‪Imp System/Manager FromUser=<> ToUser=<> File=<>.sql‬‬

‫التصدير‪/‬الستيراد في وضع جدول أو جداول ‪:‬‬


‫‪ -1‬التصدير ‪:‬‬
‫‪Exp <>/<> Tables=(T1,T2,T3) File=<>.sql‬‬
‫‪ -2‬الستيراد ‪:‬‬
‫‪Imp <>/<> Tables=(T1,T2,T3) File=<>.sql‬‬

‫تصدير مستخدم بشرط معين ‪:‬‬


‫= ‪Exp DB_Man/DB_Man File = C:\DB_Man.mdb Tables = (Emp) Query‬‬
‫'‪'Where Emp_Sex=1‬‬

‫تصدير مستخدم بشرط معين علي حقل نصي ‪:‬‬


‫‪Exp DB_Man/DB_Man File=C:\DB_man.sql Query='Where‬‬
‫'‪Emp_Name=Ahmed‬‬

‫تصدير مستخدم معين بإستخدام أوامر الفلترة ‪:‬‬

‫إخراج معلومات النظام‬

‫هناك العديد من الستعلمات داخل الوراكل يمكن من خللها تحديد معلومات النظام ‪ ،‬كما‬
‫أن هناك ‪ 4‬أشكال لعرض معلومات النظام وهو كما ممثل بالجدول التالي ‪:‬‬
‫_‪USER‬‬ ‫الستعلم علي مستوي المستخدم‬
‫_‪ALL‬‬ ‫الستعلم علي كافة المستخدمين‬
‫_‪DBA‬‬ ‫علي مستوي قاعدة البيانات‬
‫_‪V$‬‬ ‫يعرض سلوك مزود قاعدة البيانات و القفل وهو متاح مبدئيًا فقط لـ ‪DBA‬‬

‫أمثلة متعددة ‪:‬‬


‫إسم الستعلم‬ ‫الوظيفة‬
‫‪All_Users‬‬ ‫عرض كافة المستخدمين‬
‫‪User_Tab‬‬ ‫عرض كافة الجداول داخل مستخدم محدد والستعلمات‬
‫‪User_Tab_Cols‬‬ ‫عرض كافة حقول الجداول بكافة الجداول والمستخدمين‬
‫‪All_Views‬‬ ‫عرض كافة الستعلمات‬
‫‪Col‬‬ ‫عرض كافة حقول الجداول بالمستخدم الحالي‬
‫‪Cols‬‬
‫‪All_Indexes Or User_Indexes‬‬ ‫عرض كافة الفهارس ) ‪( PK - FK - Indexes‬‬
‫‪User_Users‬‬ ‫عرض معرومات عن المستخدم الحالي‬
‫‪User_Constraints‬‬ ‫عرض معلومات عن القيود‬
‫‪User_Sequences‬‬ ‫عرض كافة المسلسلت‬
‫‪All_Objects Or Obj‬‬ ‫عرض كافة الكائنات‬
‫‪User_Objects‬‬ ‫عرض كافة الكائنات‬
‫‪User_Source‬‬ ‫عرض أكواد بناء الغراض والجراءات ‪ ،‬ويعرضها سطر‬
‫سطر علي هيئة سجلت‬
‫‪All_Constraints‬‬ ‫عرض كافة القيود‬
‫‪All_OLAP_Columns‬‬ ‫عرض كافة الحقول وأنواع بيناتها‬

‫معلومات إضافية‬
‫☻ التاريخ الهجري ‪:‬‬

‫هناك طريقتين لضبط التاريخ الهجري وهم ) الطريقة الدائمة ( و ) الطريقة المؤقتة ( ‪ ،‬ومن‬
‫معني الجملتين أن الطريقة المستديمة هي الطريقة التي تستمر حتي بعد إنهاء برنامج‬
‫‪ ، SQL/Plus‬أما الطريقة المؤقتة هي التي تعمل مؤقت أثناء فتح نافذة ‪ ، SQL/Plus‬وعند‬
‫إغلقها تنتهي عملية التحويل الي التاريخ الهجري ‪ ،‬وفيما يلي شرح مبسط للطريقتين ‪:‬‬

‫) الطريقة المستديمة (‬

‫‪ -1‬قم بفتح مسجل النظام علي المسار التالي ‪:‬‬


‫‪HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0‬‬
‫‪ -2‬قم بإنشاء مفتاح فرعي من نوع نصي تحت إسم )‪.( NLS_CALENDAR‬‬
‫‪ -3‬قم بإدخال قيمة لها لتحويل الي الهجري كما يلي )‪.( arabic hijrah‬‬
‫‪ -4‬ولعرض التاريخ قم بكتابة ما يلي داخل ‪: SQL/Plus‬‬
‫;‪Select SysDate From Tab‬‬
‫‪ -5‬وللتحويل الي التاريخ الفرنجي ما عليك إل حذف هذا المفتاح‪.‬‬

‫ملحوظة‬
‫يتم إستخدام هذه المكانيات من داخل ‪ VB‬علي النحو التالي‬
‫‪('To_Char(SysDate,'DD Month YYYY‬‬

‫‪ -6‬أما بالنسبة لتنسيقات التاريخ الهجري أو الميلدي ) الفرنجي ( يتم علي النحو التالي ‪:‬‬
‫إنشاء مفتاح نصي في نفس المسار الموضح أعلة تحت إسم )‬
‫‪ ، ( NLS_DATE_Format‬ويتم وضع قيمة لها حسب الرغبة في التنسق ‪:‬‬
‫عرض التاريخ الهجري طويل ‪A – ( DD/MON/YYYY ) :‬‬
‫‪/25‬جماد الثاني‪1401/‬‬
‫) عرض التاريخ الميلدي طويل ) فرعوني ‪B – (DD Month,YYYY) :‬‬
‫‪ 24‬أيلول‪1981،‬‬
‫‪C – (YYYY/MM/DD) :‬‬
‫‪24/9/1981‬‬

‫) الطريقة المؤفقتة (‬

‫;'‪SQL> Alter Session Set NLS_CALENDAR = ' arabic hijrah‬‬


‫;'‪SQL> Alter Session Set NLS_DATE_Format='DD Mon,YYYY‬‬
‫;‪SQL> Select SysDate From Tab‬‬

‫☻ معرفة إسم خادم أوراكل ‪:‬‬


: ‫في مسجل النظام‬
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ ORACLE_HOME_NAME

: ‫أو في المسار‬
HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE\HOME0 \
ORACLE_HOME_NAME

: ‫أو في المسار‬
HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE\ OLAP \
ExpressServer \ OLAPServer \ Security \ OracleServiceName

: ☻

You might also like