sky information بتاريخ: 11 مايو 2007 تقديم بلاغ مشاركة بتاريخ: 11 مايو 2007 دمج زيادة التحميـــــــــل و إدارة الجلسة في الأوراكل================================اطلعت على موضوع في احد المواقع وحبيت ان افيدكم به=================================ميزة واحدة في أغلب الأحيان يغض النظر عنها المطورين وهي قدرة pl/sql بالسماح بزيادة التحميل (overloading).كما في لغات البرمجة الأخرى فإن زيادة التحميل تحدث حينما يستعمل المبرمج نفس الاسم للإجراء أو الوظيفة وباستغلال بعض المميزات الرئيسية من pl/sql و DBA يمكن بسرعة وسهولة بناء جلسة متعددة الاستعمال مثال نموذجي لزيادة التحميل واحد من ابسط الأمثلة دائما يشاهد في لغات البرمجة (C, C++, java) وهي الأمثلة المتعلقة بحساب مساحة المستطيل وهي كما يعرف تساوي الطول في العرضلذا فإن الوظيفة(( function التي تعود بقيمة المساحة تحتاج لبراميتر يمر من خلالهافي الحالات التي يكون فيها الطول مساوي للعرض فإن الوظيفة التي تعود بمساحة المستطيل تحتاج فقط لبراميتر واحد وغير ذلك براميتران أما الوظيفتان أو الوظيفة المزيدة التحميل باختلاف التوقيع يمكن بسهولة أن تكون مبنية كالتالي : create function compute_area (width number, length number) return number is area number; begin area:= width * length; return area; end; / create function compute_area (side number) return number is area number; begin area:=side*side; return area; end; / ولا كن هل سيكون صحيح القول أن ذلك الاستعمال ينطبق على الاستعمال في الأوراكل : 1- select compute_area(5, 3) from dual; 2-select compute_area(5) from dual; الجواب هو نعم – ولا.دعنا نبدأ بالجانب الخاطئ أولا :هل الاوراكل تسمح بمشاركة نفس الاسم لأكثر من كائن؟إذا نفذ المثال كما هو مكتوب في الأعلى كما هو سيكون الناتج خطأ ORA-00955: name is already used by an existing objectماذا لو عبارة create في الوظيفة استعملت create or replace بدلا من عبارة create نفسها؟في هذه الحالة ستكون الوظيفة الأخيرة هي المتأثرة وسوف يتم استبدالها .أما بالنسبة للجانب الصحيح :لاستعمال زيادة التحميل فإن هذه الوظائف يجب أن تكون جزء من الحزمة (package )ونرجع الآن كيف يكون زيادة التحميل مفيد لـ DBA , إن الوظائف الآن ستصبح إجراءات وسوف ينتج عنها عملية (kill session ) مستندة على إدخال (username or sid) . إن اسم الأجراء سيكون نفسه للإجراءين ولكن سيكون هنالك اختلاف في البارميترات التي تعتبر في دورها التوقيع .كون القدرة على (kill a single session ) معتمدة على sid للمستخدم أما كون القدرة على ((kill multiple users معتمدة على usernamePACKAGE :من المهم معرفة انه بدون الرزمة فإن زيادة التحميل تكون غير مسموحة. أول خطوة هي إنشاء رأس الحزمة (الذي يحوي أسماء الإجراءات بتواقيعهم ) والخطوة الثانية هي إنشاء جسم الحزمة وهذا المثال : create or replace package manage_users as procedure kill_user(the_sid in number); procedure kill_user(the_user in varchar2); end manage_users; / create or replace package body manage_users as procedure kill_user(the_sid in number) as v_str varchar2(50) := 'alter system kill session '||chr(39); v_serial number; begin dbms_output.put_line(chr(10)); dbms_output.put_line('Session to be killed:'); dbms_output.put_line('---------------------'); select serial# into v_serial from v$session where sid = the_sid; v_str := v_str||the_sid||','||v_serial||chr(39)||';'; dbms_output.put_line(v_str); exception when no_data_found then dbms_output.put_line('No such session.'); end; procedure kill_user(the_user in varchar2) as v_str varchar2(50) := 'alter system kill session '||chr(39); v_statement varchar2(50); cursor user_cur is select sid, serial# from v$session where username = upper(the_user); begin dbms_output.put_line(chr(10)); dbms_output.put_line('Sessions to be killed:'); dbms_output.put_line('----------------------'); for user_rec in user_cur loop v_statement := v_str||user_rec.sid||','||user_rec.serial#||chr(39)||';'; dbms_output.put_line(v_statement); v_statement := null; end loop; end; end manage_users; وهنا طريقتان لاستدعاء أو تنفيذ الحزمة : 1- exec manage_users.kill_user('scott'); 2- exec manage_users.kill_user(141); ما عليك بعد تنفيذ هذه الحزمة هو نسخ ولصق العبارات في النهاية:زيادة التحميل تسمح لـ DBA أو المطور باستعمال الأسماء الحالية للوظائف أو الإجراءات اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
-=|mOOdY|=- بتاريخ: 11 مايو 2007 تقديم بلاغ مشاركة بتاريخ: 11 مايو 2007 موضوع شيق اخي الكريمبارك الله فيك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sky information بتاريخ: 11 مايو 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 11 مايو 2007 شكرا لمرورك اخي moody اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
amino1 بتاريخ: 11 مايو 2007 تقديم بلاغ مشاركة بتاريخ: 11 مايو 2007 جزاك الله خير وأنار بصيرتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.