بسم الله الرحمن الرحيم اليوم إن شاء الله بنكمل في
chapter 6 اللي هو بتكلم عن الـ BLSQL شرحنا المرة
الماضية الـ procedure و الـ function حكينا ايش الفرق
الأساسي بين الـ function و الـ procedure الـ function
فيها فيها return بترجع قيمة واحدة بس بينما الـ
procedure مافيش فيه return لأي قيمة وحكينا في الـ
function لما بعمل الـ function لازم اعرف نوع الـ
return يعني لازم احكي ان اللي بدي ارجعه اللي بدي
اعمله return عبارة عن date او number او variable
character او كذا يعني بدي احدد نوعه مابنفعش
function مرة ترجع number يا روان انت و مريم و مرة
ترجع date او number فبننتبع الـ return طبعا بتبع الـ
function الآن عشان أنافذ function انا كتبتها ايش
بستخدم؟ أبسط إيش ممكن أستخدمه عشان أنافذ function
مكتوبة وجاهزة select .. select واسم الـ function
from دوال اسم الـ table الوهمي اللي هو إيش دوال هذا
الكلام طبعا في الـ Oracle فقط مروح على إش تاني و
أتعلموا إش تانيتمام select اسم الـ function from
dual الـ select وظيفتها مش بترجعيلنا قيم فهي
هترجعلي قيمة واحدة اللي بترجعها من الـ function مش
احنا اتفقنا ان الـ function بترجع single value
فهترجع عنده single value هترجع من الـ select بينما
الـ procedure مابيرجعش اشي لو عملنا له select مافيش
اشي يرجعه ف الـ select هتعطيني error فإيش بنستخدم
بنستخدم بدل الـ select execute
وبنحط اسم مين اسم الـ procedure وبتم تنفيذه تمام؟
كتبنا code احنا للـ .. للـ function كتبنا code اخدنا
مثال عليه فهي عندى execute فده لازم يكون ايش لازم
يكون procedure award bonus رقم موظف 150 وابننا
نعطيه bonus 400 مشروح الـ code فى الـ slide اللى
قبلها هى create procedure مش function شرحناه
واخدناه بالتفصيل وعملنا احنا two examples خاصين
فينا عملناهم عملي على الـ oracle قدامكم المرة اللى
فاتت
هي في عندى كمان procedure كمان example ناخده مع
بعض على الـ procedures ببدأ فيه ب create or replace
procedure إذا أنا بدأ شغل على procedure مش ع
فانكشن مافيش return عندي سميته update management
بحط فيه company ID in و الـ variable هذا إيش بده
يكون الـ parameter هذا الـ argument in إيش يعني in
يعني بس بنقرأه مسموحنا نعمله referencing only for
read ممنوع نعمل عليه over write ممنوع نكتب عليه
ممنوع نعدل عليه لو كان out مسموح
نكتب عليه و نعدل عليه بس ممكن نقرأه و نعمله
referencing لأ إذا بدنا نقرأه و نعدل عليه إيش لازم
يكون in out number اللي هو نوع الـ data type تبعه
number مش date مش string اللي هو الـ variable
character أو الـ characteras أو ايش ممكن بدأ الـ as
نكتب؟ مين يذكرني؟ is يعني اما as او is الآن اول
فقرة بتبدأ هذه الفقراش مين بحط فيها؟ declaration
تعريفات الـ variables declaration فهي في عندي كام
variables واحد اسمه title string title_
cr نوعه variable character two تلاتين حرف بدي ابدا
الـ code تبعي هاي الـ beginوهي نهاية الـ code الـ end
هعمل select لـ column ايش اسمه title من اي جدول
employees و بدأ خازنه وين انتوا تبقوا على الترتيب
يعني انا الـ quiz اللي صلحتلكم إياها سهلت في
التصليح في كتير ناس لليوم لليوم جملة الـ select
العادية و الـ insert العادية لليوم جملة الـ select و
الـ insert العادية مش حافظين الترتيبكون insert
values then into أو ناسل انتوا او
ناسل انتوا او
ناسل انتوا او ناسل انتوا او ناسل انتوا او ناسل
انتوا او ناسل انتوا او ناسل انتوا او ناسل انتوا او
ناسل انتوا او ناسل انتوا او ناسل انتوا او ناسل
انتوا او ناسل انتوا او ناسل انتوا او ناسل انتوا او
ناسل انتوا او ناسل انتوا او ناسل انتوا او ناسل
انتوا او ناسل انتوا او ناسل انتوا او ناسل انتوا او
ناسل انتوا او ناسل انتوا او ناسل انتوا او ناسل
انتوا او Begin, select title اسم الكلم, into في
الـ variable اللي بتخزن فيه قيمة الكلم from اسم
الجدول بما أني بدي أخزن value في variable، الـ
variable هذا كم value بتحمل أخزن فيه؟ variable واحد
تحمل القيمة واحدة لو عملت أنا الـ select بدون where
يعني هرجع كل قيم الكولوم في الجدول كله هرجع مثلا
مئة قيمة ألف قيمة ألفين قيمة مابتخزنوش في الـ
variable لازم الـ select اللي بتعمل فيها select
into ترجع قيمة واحدة عشان ترجع قيمة واحدة بدي
where و الـ wear هذه انا اكون متأكد اني بعمل
condition مابرجعش الا سطر واحد غالبا هذا الـ
condition مين هو غالبا الـ primary key بس هذا لا
يمنع ان انا استخدم candidate key تاني غير الـ
primary key او يكون عندي condition طويل يعني انه
الـ color red and يكون مش عارف ايش كمان green و
يكون الـ كذايكون ايش condition طويل بحيث ان اضمن
انه one value اللي بتتخزن في الـ variable اللي عندي
لان هين استخدمت الـ company id أخدت الـ company id
in اللي هو من وين أخدناه من الـ parameter تبع الـ
procedure وهذا يفترض انه primary key انه رجعلي
قيمة واحدة في الـ title string لان اش انا عامل في
الـ code عندي عامل if statement بدي افحص if و else
if وهي end الـ if نهاية الـ ifبدي أفحص إذا الـ title
string president ثم أعمل لي update لـ table employee
تغير الـ salary تصير بتساوي كام الـ salary ضرب نص
where الـ company ID بيساوي الـ company ID in نفس
الشرط اللي كان في الـ select غيرنا الراتب تبع الـ
president تبع الشركة إذا الـ title else if الـ title
vice president بدي أضرب الـ salary مثلا في ربع
و نفس الشيء هاي الـ where statement عشان احدد انه
بس لسطر واحد بعمله update and if أنهينا الـ if
حطينا exception ايش فدت الـ exception؟ لو صار اي
error أبسط error ممكن يصير عندي ايش هو؟ ان الـ
select هاي ماترجعش اي شي أكون انا ماعطيها مثلا الـ
select where الـ company ID بيسوي company ID in
يكون الـ company ID in هذا اللي انا حطته مش موجود
في الـ table بما انه مش موجود هترجح هاي ولا اي شي
صفرهيكون هذا فاضي فلما قاعد أفحص على الـ F
statement مافيش فيها أشي أفحصها أصلا هتعمللي مشاكل
مباشرة بروح وياني على الـ exception فالـ exception
وين؟ إيش الـ exception اللي عندي؟ إيش اسمه؟ no data
found اسمه هنأتي ناخد بعض أنواع الـ exceptions اللي
موجودة أصلا في الأوراق اللي هناخد أربع أو خمس
أنواع من ضمنها الـ no data found هذا الـ no data
found بتطلع من الـ select اللي مابترجعش إشي الفاضية
اللي مافيش فيها إشي فلو أحنا عملنا select كانت
فاضية هيطلع عندي هذا الـ exception إيش بنروح نعمل
نقل يعني بس بدنا نسكته أن أحنا أه عرفنا أنه في
exception و بدناش نعمل إشي بدل ما الأوراق يصير
تطبعلنا errors من عندهاهي انا بحكي، يا انتوا
بتحكوا، احنا الاتنين نحكي مع بعض مش كتير يعني زاد
طمعان، زي اللي وراك يا روحاني، سطر اللي ورا و اللي
بعده exception
when عندي الـ no data found then null ماتعملش إشي
خلاص بس يعرفنا إنه في exception مابدناش تطلع
errors ع الشاشة و خلاص أو ممكن أروح أنا أطبع على
الـ user أعمله print أخدنا الـ DBMS output bot line
اللي هي زي function لـ print في الـ python عندكم و
نروح نطبع سطر نكتبله إنه الـ data هذه فيها مشكلة
أنت مدخل الرقم غلط راجع الرقم تاني و هكذا and
انتهى الـ code procedure بسيطة
هي كمان procedure تاني كمان example example 3
create
or replace procedure إيش اسمه student mark student
mark اختصرناهنحب الاختصارات في البرمجة عشان ايه؟
عشان نريح راسنا من كتر كتابة الـ code student mark
في عندي two parameters لإن هدول مش variables فتحنا
احنا ايش و sin للـ parameters في عندي الـ student ID
وفي عندي الـ course اللي هو الـ course رقم للـ course
in الاتنين in الاتنين بدي اقراهم بس قراءةنوع الـ
data type بتاعتهم مغلبتش حالي ان اكتب data type
number أو date أو variable character روحنا خدنا
data type جاهز من مين من الـ column اللي بدنا
نتعامل معاه بدنا نتعامل مع table اسمه studies
column اسمه الـ course code و column اسمه الـ number
لل student بدي أخد الـ type بتاعتهم اتنين أعمل الـ
two types لل two variables بما أني بدي أتعامل مع
هدول الـ columns إذا أنا أكيد أنا هأعمل select من الـ
two columns هدول وأخزن وين في الـ two variables هاي
الـ .. الـ .. الـ begin عملت select mark into mark
هذا طب هذا ليش مش معرف؟ لأ هي معرفة في الـ
declaration في عندي كمان variable هدول two
parameters هاي في عندي variable في الـ declaration
في الـ as أو الـ is في عندي mark عبارة عن الـ student
الـ studies dot mark الـ type تبعها فأنا هأعمل select
لل mark وأخزينها في مين؟ في الـ mark from نفس الـ table
اللي هو الـ studies where رقم الـ student هو الرقم
اللي مين اللي احنا جبناه في الـ parameter and الـ
course رقم الـ course طب ليش استخدمت أنا رقمين في
هذا الجدول؟ هذا جدول زي جدول الـ enrolled اللي
أخدناه الـ registration الـ primary key تبقى عبارة
مش عن كلمة واحد combined رقم الـ course مع رقم الطالب
فأنا إذا بدي الـ select هذه ترجع لي one value لازم
أختار اللي هم إيه رقم الطالب ورقم الـ course مع
بعض الـ primary key كامل two columns فاحنا حددنا الـ
two columns هي الـ where فيها and النتيجة اللي
هتطلع ليها علامة الطالب في الـ مساق اللي هو مسجده
هتتخزن في الـ mark هذه لأن بدي أطبع أنا على الشاشة
علامة الطالب عملنا output لمين؟ لعلامة الطالب و
أنت بس هيكل الـ procedure اللي بيعمله الـ procedure
بس أنا بأعطيه رقم طالب والمساق اللي هم سجله بأطبع
ليه إيش بقى اللي علامته بس علامته؟ أفرض أنه يلو
علامة لو ما لوش علامة هتصير exception عاملين احنا
handling لل exception هذه مشكلة في الـ procedure هذا
بدنا exception على الأقل على الأقل ولو سطر واحد
في الـ exception نعطي print أنه رقم الطالب أو
المساق مثلًا ما فيش فيه علامة أو الطالب هذا مش موجود
وإذا رقم الطالب غلط أو رقم المساق غلط برضه مش
هيعطيني أي شيء فلازم يكون في عندنا يعيش هي فائدة الـ
exceptions يكون في عندي exception بتعامل معاه
المثال مثلًا مثلًا
مثلًا مثلًا مثلًا
مثلًا
مثلًا مثلًا مثلًا مثلًا مثلًا مثلًا مثلًا مثلًا
مثلًا مثلًا مثلًا مثلًا مثلن مثلن مثلن مثلن مثلن
مثلن مثلن مثلن مثلن مثلن مثلن مثلن مثلن مثلن مثلن
مثلن مثلن مثلن مثوالآن بيصير عندي function name
بدل الـ procedure name والـ parameter less زي ما هي
نفس الفكرة الـ in والـ out والـ in out لكن بعد
الكلام هذا كنا في الـ procedure مباشرة نكتب is أو
as الآن قبل الـ is أو الـ as بدي أحط الـ return مع الـ
data type إن هذه function بدي ترجع number function
بدي ترجع date function بدي ترجع variable character
طوله مثلًا 100 حرف بدي أحدد إيش بالضبط اللي بدي
أرجعه بعد ما أحدد الـ type تبعته نفس الأجزاء زي الـ
procedure declarations begin مع end في statements
في exception بس بدنا نلاحظ أن الـ statements لازم
آخر الـ statement تكون return والقيمة اللي بده
يرجعها يعني
فعلاً أنت بتطلع الـ code تبع الـ function وتبع الـ
procedure الفرق السطر هذا وهذا السطر وكلمة
function بدل الـ procedure لما أجي أنفذها مش
هينفع أروح أعملها execute فأبدأ أعمل execute زي ما
بعمل في الـ procedure في عندي return value وما
بترجع ما لهاش مكان ترجع عليه فأبدأ أستخدم اللي هي الـ
select اسم الـ function from dual عشان ترجع القيمة
وين على الـ select اللي دي طبعًا function بأبدأ أنادي
function أستدعيها وآخذ قيمة منها يعني هاي عندنا
example على function كاتبينها ومجهزينها بدي
أعمل create or replace لـ function اسمها increment
in range in CR in range في عندي ship date in بدي
أقرأه تاريخ لـ shipment في عندي date اللي هو الـ
variable type تبعها الـ variable تباعها نوعه date
مش number مش character في عندي الـ S date برضه N
بده أقرأه وبرضه عبارة عن date في E date برضه N و
برضه تاريخ يعني بده يعطينا الـ function هاي three
dates return إيش ده؟ ترجع integer بده تعطيني رقم
integer as begin بده أفحص إذا الـ ship date between
الـ S date والـ E date رجع لي واحد true يعني إذا لأ
مش بينهم رجع لي zero إذا
شاب من date بين الـ start والـ end start date is
date end date تاريخ النهاية إذا بينهم رجع لي true
إذا مش بين التاريخين رجع لي false في عندي مشكلة
يعني في الـ dates اللي عندي end if end هذه كل الـ
functions اللي بتعملها بس بأعطيه ثلاث تواريخ تفحصل
أولًا بين الاثنين التانيين ولا مش بينهم ممكن
functions زي هذه مع تعديل بسيط لازمة لكم في وين في
المشروع تبع الفندق مش في عندكم تواريخ حجوزات بدنا
نفحص مثلًا تاريخ معين ضمن عطلة ضمن تاريخ حجوزات إشي
بدي أحجز غرفة من range لـ range حاجة لازمة لكم تكتبوا
functions بشكل شبيه في هذا الـ cursor لحد
الآن كل الـ functions والـ procedures اللي كتبناهم
كنا نعمل select إذا أنتم ملاحظين كنا نعمل select
into ونخزن في variable وبما أنه بنخزن في
variable يعني لازم يرجع لي قيمة واحدة select into
ترجع لي قيمة واحدة طب لو أنا بأبدأ أعمل function تعمل
علامات bonus لكل الطلاب عندي مش طالب واحد بدي أعمل
function تتعامل مع طالب واحد أعطيها رقم الطالب
وأسير أsettle الـ function أكثر من مرة كل مرة أحط
رقم الطالب وأعطيه bonus رقم الطالب وأعطيه bonus
هي طريقة في طريقة أحسن إن أنا أعمل function
ما أعطيهاش رقم الطالب أعطيها مثلًا مجموع طلاب أو
أعطيها table طلاب وتروح لحالها تعمل loop مش
أخدنا for loop و while loop وتلف عليهم واحد واحد و
تغير في علاماتهم مثلًا تعطي الكل bonus تحسب لكل
bonus لأن عشان العملية هي أتم الـ select عندي اللي
بدي أرجع فيها للقيم بدي ترجع أكثر من row أكثر من
one row طب مشكلة مش حاضرة أخزنهم في variable بدنا
حل الحل اللي طلعوا فيه في BLSQL إيش اسمه؟ الـ cursor
الـ cursor هتبدئوا تفكروا فيه على إنه عبارة عن
variable اتخزن فيه مجموعة من الـ rows زي كأنه array
بأخزن فيه أكثر من سطر من الـ database زي كأنه view
بأخزن
فيه مجموعة من الأسطر وفي مجال بعد ما نخزن فيه أسطر
بعد ما نخزن فيه في مجال نلف عليهم سطر سطر بالترتيب
بالدور ونروح نعمل update عليهم بالدور
كيف نتعرف الـ cursor في فترة .. في منطقة الـ declare
بتاعة الـ variables نتعامل مع الـ cursor عنه variable
في الـ declare ممكن نعرف cursor ولاحظوا الـ cursor
تعريفه عبارة عن إيش؟
عبارة عن select تعريفه عبارة عن select نفتح
عزاه ولا لسه؟ طيب نتبهوا معاك
declare cursor عندي اسم للـ cursor cursor يعني إن
أنا اللي بدي أعمله cursor هذا اسم له كيف نعطي اسم
لل variable is عبارة عن جملة select الـ cursor هذا
اللي عندي select star from employees إيش هأخزن فيه
كل معلومات الـ employees كل الجدول الـ star يعني كل
الـ columns from employees بدون where بدون شرط يعني
أنا بدي إياهم كلهم كلهم إذا بدي أرتبهم بعمل select
star from employees order by ..أخدنا الـ order by و
بنحط ترتيب إذا بدي أرتب حسب الرقم أو حسب الاسم
order by name أو order by ID number إذا أنا بدي بس
مجموعة من الـ employees بس بدي الناس اللي بتشتغل
بالساعة where الـ job type مثلًا equals مثلًا H مثلًا
H ترمز لـ hour للناس اللي بتشتغل بالساعة الطلاب
اللي عندي اللي بتعطيهم bonus ليش هأعطي الكل bonus
بتعطي bonus بس للي جايبين فوق الـ 70 حاجة أعمل
select star from students where الـ mark أكبر من 70
فصار الـ cursor اللي عندي مخزن فيه بيانات الطلاب
لإعلامتهم فوق ال 70 و بروح في ال code تبعي تبع ال
function أو ال procedure بمشي عليهم بالضوء إذا أول
معلومة بدنا نعرفها ال cursor فيته أنه يحللي مشكلة
ال one row بتاعة select into فبستغني عن ال select
into بنعمل select عادية تتخزن كل قيم ال select في
من؟ في هذا ال cursor هذه أول معلومة، معلومة أن كيف
بنعرف الكيرسر كيرسر واسمه is جملة select جملة ال
select هي جملة select ممكن تحطوا فيها أي إش
تعلمناها في ال select تحطوا فيها group by تحطوا
aggregate functions, list of queries, where,
having اللي بدكميه تتعاملوا معاه بتجيبوه من خلال
ال select و بتخزن في الكيرسر لأن بعد ما خزنناها في
ال cursor نتعامل مع ال cursor بطريقة شبيهة بال
files أخدتوا كيف نتعامل مع ال files في ال python
عشان نتعامل مع file نروح نعمله open و بعدين نقرأه
و لما نخلص عشان نعمله close صح عشان كنت تعمله في
ال python ال cursor هضم نتخيل أنه زي كأنه file بعد
ما بعرفه فعليا هو لسه ماخزنش بيانات عشان أخزن
بيانات لازم أروح أعمله open و بعدين بصير أقرأ منه
كيف كنتوا تقرأوه من ال file مش سطر سطر بصير أقرأ
منه سطر سطر بس أخلص منه بدي أعمله close تمام
طيب كيف نعمله open هيو بس كلمة open اسم الكارثة
صعب مالكم نسيين ال files
تعريف ال cursor بتاية اللي ماكانش صعب كتبنا cursor
و كتبنا له اسم و جملة select is select لأن بدي
افتحه ي open اسمه خلصنا منه بدنا نسكر close اسمه
أثناء التعامل معاه كيف بقرأ كل سطر من خلال كلمة
fetch fetch يعني اعطيني السطر اللي بعده ال row
اللي بعده fetch اسم ال cursor خزاننا قيمة وين؟ into
variable into variable اللي بتتعامل معاه إذا كان
بيرجعلي مثلا زي اللي كنا عاملينه اللي هو select
star from employees يعني أكتر من كلهم بدي أعمل
fetch ال employee cursor into و أعمل اللي هو
variable اتنين تلاتة أربعة خمسة أو بيكون هذا ال
variable إيش نوعه إذا بديه سطر كامل
متذكرينه ولا نسيناه؟ أول مرة تسمعوا فيه؟ طيب
تعرفوا عليه Raw type حكينا ال raw type بنعرفه على
جدول فبيعطيني سطر لكل أعملت الجدول فممكن يكون هذا
ال variable عبارة عن raw type ويكون هذا ال cursor
معمول على انه select star من الجدول وبالتالي هتيجي
كل عاملة الجدول تتخزن في variable واحدة لأن ال
variable هذا فعليا جوا مثلا خمسة columns او ستة
columns او سبعة columns تمام
انا راح اعرف cursor في ال declare cursor واسمه و
is جمل السلكي بدي اعمله open باسمه fetch باسمه into
في ال variable اللي بتخزن فيه قيمة السطر اللي أنا
واصله الآن كل ما بعمل fetch باجي على السطر اللي
بعده فتش على السطر اللي بعده طبعا مش حتى بال fetch
هي عشر مرات او عشرين مرات هحطها في وين بالضبط هذه
هحطها for loop of while loop و ال open بتكون قبل
ال loop و ال close بعد ال loop هيكم تعرفوا تبرمج
أحسن مني تمام طيب هي close للكرسة لأن الكيرسر هذا و
احنا بنتعامل معاه كيف بنعرف إنه رجع عشر أسطر،
عشرين سطر، تلاتين، أربعين؟ اللوب هاي كم مرة بدها
تلف؟ مش احنا اللوب عشان تلف بدنا condition نوقف
عليه اللوب أو نخليها تستمر بنانا عليه؟ من أين بدنا
نعرف ال condition؟ نعرفه من ال variables هدولة
المتعلقين بالكيرسر هدولة في variables في كل كيرسر
attributes بنسميهم للكيرسر موجودين مع كل كيرسربس
بحط اسم الـ cursor وعلامة في المية is open اسم ال
cursor و found او not found او اسمه raw count ايش
بيعطوني ال is open اذا كان مفتوح اذا كنت انا عامله
open هيعطيني true و اذا كان لسه مش مفتوح او انا
كنت مسكراه و عامله close هيعطيني what؟ false واضحة
true if cursor currently active open is open found
هذي بعد الفتش بستخدمها هذي اللي بستخدمها جوا اللوب
هذه بستخدمها قبل اللوب عشان أتأكد قبل ما أدخل في
اللوب أنه معمول له open هذول واحدة منهم بستخدمها
جوا اللوب عشان أنهي اللوب ال found هذه بعد ال
fetch بستخدمها إذا عملت fetch و رجعلي سطر بيعطيني
true هاي true whenever row is successfully fetched
إذا عملنا fetch و كانت ال select مخلصة خلصت مثلا
كان فيها عشرة و خلصناهم كلهم و ماعملنا fetch عشر
مرات هترجعلي هاي false هاي عكسها هاي العكس هي لما
أعمل fetch successfully بترجعلي false و لما أعمل
fetch و تخلص ال select مافيش فيها ولا row بتعطيني
true العكس زي ال is null is not null found و not
found بس أخدم واحدة منهم يا هى يا هى ال row count
بتعطيني الكيرسر واصل لأي row إذا قرأنا السطر الأول،
التاني، التالت، الرابع، الخامس، السادس و روحت
بعدين عملت draw count تحكيلي أنه أنت صرت قارئ لحد
الآن ستة كملنا لعشرة بتعطيني أنت صرت قارئ لعند
عشرة فبتعطيني أكم سطر احنا صرنا قارئين مش أكم سطر
موجود جوا الكيرسة بعرفش أكم سطر جوا الكيرسة نعرفش
إذا بدنا نعرف لازم نقراهم كلهمو بس نخلص نروح نفحص
ال raw count بيعطيني عدد الأصل انه هيعطيني رقم آخر
سفر أنا قرأته code
صغير عشان نستوعب اللي بيصير آه
ده code صغير كله shipper هاي ال declare بتعامل مع
block، ال block هذا ممكن يكون في function أو في
procedure أو في أي مكان في البيئة ال SQL هي منطقة
ال declare، عرفت cursor، cursor إيش سمته؟ إيش ده
خزن فيه؟ is؟ select، ال e name وال salary، يعني
two columns بس، من أي جدول؟ employee، حددت شرط؟
يعني هاخد كل بيانات ال employees من جدول ال
employees، بس مين؟ بس two columns ال name وال
salary، ال name وال salary لاحق أخد address لاحق
أخد عمر لاحق أخد تاريخ ميلاد بس حددت انه two
columns روح تعمل two variables X بياخد ال type تبع
مين تبع ال e name من جدول ال employee و Y بياخد ال
salary تبع جدول ال employees معناته انا لما بدعمل
ال pitch بتاعة الكيرسر هذا ال ABC بدعملها into الـ
two variables هدول مش كل مرة بدأ أقرأ سطر و أخزن
قيمة السطر اللي هم ال E name و ال salary في ال X و
في ال Y اللي هم عبارة عن E name و salary هاي ال
begin بدي أبدأ أتعامل مع ال cursor عشان يشتغل ال
select بتاعة و تشتغل أيش لازم أعمل open أول أشي
لازم أفتح مجرد ما أعمل open تتنفذ ال select هاي
الان الـ select اشتغلت ورجعتلي مجموعة من البيانات
في ال cursor ال ABC هعمل fetch لل ABC into ال X و
ال Y يعني هاتلي أول سطر من ال ABC cursor هيعطيني
ال name و ال salary بدي أخذنهم في ال X و في ال Y
خذنناهم هروح أطبع طبعت سطر ال name قيمة ال X ال
salary قيمة ال Y fetch
كمان مرة لل ABC في ال X و في ال Y طبعت كمان موظف
كمان اسم و كمان كمان salary Fetch كمان مرة تالتة و
هكذا طريقة هذه صح في الشغل بدائية بدائية انا كررت
ال code تلت مرات المنطق بيحكي اني ماكررش تلت ولا
عشر ولا عشرين احطه في loop ال example اللي بعده
احنا نحطه في loop خلصنا من ال ABC cursor بعد ال
open و ال fetch خلصنا اش بنعمل Close ال ABC و End
ايش النتيجة انه طبعا عند ال name Smith راتبه 800
ال name Allen راتبه 1600 ال name Ward راتبه 1250
اهم
من راتب امريكا ان احنا افترضنا انه فعلا فيه في ال
cursor تلاتة طب لو كان فيه في ال cursor اتنين
التالتة هتعمللي error التالتة هتعمل يقرر لو كان هو
فعليا ما فيه غير اتنين فبالشكل هذا انا في عندي
تكرار لل code ممكن يكون الف طالب الف موظف مش هكرر
الف سطر في ال code بالاضافة ان انا مش عارف
امتحانتي فالصح ان انا استخدم ال loop لنعدل ال code
و نستخدم loop cursor abc is select أخد كل ال
columns from employee فمباشرة مدام أخدت كل ال
columns ال variable اللي بدي أجيبه ياما بدي أجيب
أربعة أو خمسة أو ستة variables بعدد ال columns أو
بدي أعمل variable واحد اشنوعه مش type رو type عشان
ياخد سطر كامل هاي فادة ال raw type بوفر عليه في ال
code بدل ما نكتب code طويل في code صغير بنختصر
الشغل beginبدأنا نستخدم ال F و ال loop مع ال
cursor بشكل يمنع ال errors if not ال ABC is open
then يعني حاجة أفحص الـ ABC is open إذا مش open و
أعطاني false هعمل not و أروح أعمله open إذا مفتوح
من أول مش سادي أنا الـ cursor هذا قبل هيك معمله
open قبل هيك مش هنعمل open هتصير false و نطلع برا
فأنا بفحص open مش open إذا مش open روح افتح و اعمل
لقبل End if هعمل fetch لأول مرة و حطه في الـ X و
حاجة اطبع الـ output x.name و بعدين هيتعامل مثلا
example على الـ row count عدد الأسطور و لما هروح
اطبع number of rows طلعوا اسم الـ cursor و اعطيتوا
row count كم لازم تطلع الـ row count واحد لان
مااخدناش غير سطر واحد وراحظوا كيف استخدمنا الـ is
open مع اسم مين اذا عندى كمان cursor تاني كل واحد
باسمه بحط اسمه is open اسمه row count اسمه found
أو not found لان بعدها بفحص كمان مرة is open اذا
مفتوح بداشي اروح اعمله close سكرنا and if فراح طبع
للـ name smith عدد القسطر واحد بس هيك احنا اتعاملنا
في عملية الفتح للـ cursor والاغلاق بطريقة آمنة
استخدمنا الـ is open حس اني ماغلطش اني ماسكرش اشي
مش مفتوح ومافتحش cursor هو اصلا مفتوح ارد اعمله
كمان مرة open لان بدأ استخدم اللي هي الـ loop هذه
الـ loop نفس الـ code السابق بالضبط الـ X عبارة عن raw
type والـ cursor اسمه abc بياخد star from الـ
employee begin روحنا فتحنا إذا بدك تفزعي الكود
الأولا اعمل if not is open أروح أعمله open، تمام؟
لإن أنا بدي أعمل loop، الـ loop هي ممكن تكون for,
while, exit, when، أي نوع من loops اللي أخدناهم،
هعمل loop, exit, when، إيش؟ الـ ABC ماله؟ not
found، not found، يعني إذا أنا جيت، عملت fetch
وماعطانيش إشي، معناته إيش؟ معناته بدي أطلع، ماضلش
إشي في ال .. ماضلش إشي أقرا و أعمله fetch فتش الان
abc into x فتقول لما هذا الشرط مش متحقق هضلني ادخل
في الـ loop كل مرة هضلني فتش فتش للسطر اللي بعد و
لعين ما اخلص و الـ not found هتعطيني true بطلع من
الـ loop هاي نهاية الـ loop فكل مرة ايش بده اعمل بس
بده اطبع اسم الموظف و الراتب تبعه x dot salary و x
dot الـ e name و اطبع جنب الاسم كلمة name و جنب الـ
salary اكتب salary is لو في عندي عشرة موظفين في
الجدول هتلف اللوب هي عشر مرات و أطبعهم كلهم عشرين
هيلف عشرين ألف هيلف ألف ماكررتش الـ code ألف مرة زي
الأمثل السابق أنا ظن أني أكتب fetch الـ close خلصنا
هي open هي fetch و الـ fetch في اللوب خلصنا من
اللوب يعملنا close و end راح طبعا عندي ايش عندي
مثلا خمسة عشر اتناشر موظف كل واحد اسمه راتب واسمه
راتب واسمه راتبوالي بوعلامته Guest في فندق و
الغرفة اللي حاجزها أو التاريخ اللي هو حاجز فيه
Guest و الـ price تبع فطورته أو order و قيمة
الفطورة الـ price بتاعة الـ order كل هذا بدل ما نعمل
مجموعة من ال .. في الـ select العادية بتطلع عندى
الأسماء و القيم بدون text بس إذا بدى text حواليها
زي هيك بدي اشي زي ايش زي الـ function هذه و تسهل
عليه الشغل عرفنا ايش فائدة الـ cursor؟ مين لخص
فائدة الـ cursor في السطر؟ بالضبط احنا في الـ
function و الـ procedure العادي نقدر نتعامل بس مع
variable واحد راجع من الـ select select انتوا
بتعطيني variable واحد الـ cursor الفكرة فيه انه
مجموعة من الـ rows بخزينها في الـ cursor وبتعامل مع
الـ cursor في loop من خلال الـ fetch الـ cursor بده تعريف
كيرسره اسم الـ select بده open و بده close و بين الـ
open و الـ close في عندي مين؟ في عندي fetch بتكون
موجودة جوا loop كيف بنهي الـ loop أو كيف اتحكم في الـ
loop من خلال الـ found و الـ not found attribute
بتاعة الـ cursor كيف بعرف انه open و لا مش open من
خلال الـ is open attribute تبع الـ cursor كيف بعرف عدد
الأسطور يعني احنا ممكن نطبع بس نخلص الـ loop هاي و
نطلع قبل ما نعمل close في المنطقة هاي بعد الـ loop
و قبل الـ close ممكن نروح نطبع اللي هي الـ row count
يعطيني عدد من عدد الأسطور اللي طبعناهم نعرف أكم
موظف كان عندنا تمام؟ أخر شيء أريد أن أقوله أن هناك
Loop خصوصي تتعامل مع الـ cursor بكل سهولة وهو الـ for
loop الـ for loop تغنيني عن الـ fetch وهذا هو كود
الـ for loop مع الـ cursor دكلير هذا الـ cursor عرفناه
عرفت cursor في where statement
ABC احنا كنا في الـ four نكتب for X in ونعمل range
واحد لمثال لمية صح؟ الآن بدل الـ range من واحد لمية
N اسم الـ cursor فهو لحالها الـ loop بتصير تمشي الـ X
هذا جوا من؟ جوا الـ cursor على عادل أسطور زي الـ four
loop اللي كنت أخدها في الـ python مع الـ array for
X N واسم الـ array فأمشي على كل الـ array هذه نفس
الفكرة for X in اسم الـ cursor تمشي على كل الـ cursor
loop و end loop و لاحظوا فيه فتش اوتوماتيك لحالة
هذه الـ for loop in abc بتمشي على عناصر بدون فتش
بدهاش فتش بس بدنااش ولا حتى open كمان ولا اشي ها
using الـ for loop means الـ cursor will implicitly
لحاله open و fetched و بس تخلص الـ loop closed فاحنا
أحسن إيش نستخدم mean هاي بتريحنا في الـ code لا بده
open الـ cursor ولا بده closed ولا بده fetch أما إذا
استخدمنا الـ while أو الـ exit when لازم احنا قبل
اللي و بنعمل open و بعد اللي و بنعمل close و نحط
سطر الـ fetch في الوسط و نفحص على found و not found
عشان نطلع هذا مابديش فحص حتى كمان لأن خلاص هي
لحالة for x in اسم الـ cursor فاحنا حاولوا دايما
تحفظوا الكود هذا أسهل إيش للشغل و للبرمجة هيك أنا
بكون خلصنا الـ cursor خلصنا الـ function خلصنا الـ
procedure لأ لسه مخلصناش ضايل عندي اللي هو أهم
موضوع في الـ chapter اللي هو الـ triggers بدنا نركز
على الـ triggers المرات القادمة ان شاء الله