بتاريخ: 30 أغسطس 200619 سنة comment_77610 السلام عليكم اولا اود ان اشكر كل اعضاء هذا المنتدي الجميل وارغب فى مساعدتكم لي .انا فانا اجيد sql الي حد ما بشكل جيد واتعامل مع الفورمز بشكل ما متوسط ولكن مشكلتى تكمن فى pl/sql وارجوا مساعدتكم . انا قمت بتحميل ملفات ودروس كتير فى pl/sql ولكن لم استطع فهم الكثير منها وذلك لان الشرح فيها يتم بشكل نوعا ما معقد وربما يكون مخي انا اللي مش كبير معلش استحملونى .انا كل اللي اريده منك تسهيل عملية شرح بعض الامور لي بشكل نوعا ما مبسط وممثل ولو بمثال بسيط هقولكم مثال يعني علشان اللي يشرحلى يفهمنى انا عايزه ايه ويقدر يوصلي المعلومة مثلا احنا عارفين كلمة select مهمتها الاختيار فمثلا لو عايزين نختار كل الحقول بنكتب select * from tab;ودى معناها اختار كل الجداول اللي فى القاعدة لو حد يشرحلى بالشكل ده اكون ممنونه اوى وكل اللي بطلبه منكم مثال عملى . معلش اللي عايز يساعدنى علشان خاطرى يستحملني انا مش غبية اوى كده بس الامثلة المذكورة فى الدروس عبارة عن h , k n كلها رموز مش فاهمه منها حاجة لكن لو فى اخ فاضل يقدر يشرحلى بمثال عملى على جدول زى emp ,sal اوى حاجة المهم اقدر اطبق عليها في الطبيعة علشان افهم الشرح بشكل مبسط .انا اسفة اوى اوى انى اتكلمت كتير بس فعلا انا محتاجة مساعدتكم ودلوقتى الحاجات اللي عايزة اعرفها هى كالاتى :جملة IF وجملة elseif وجزء Declare – exception امتى استخدمهم وازاى بمثال مبسط على جدول حقيقي وليكن emp .معلش استحملونى بالنسبة لل cursorprocedure LoopSESSION% rowtype package package body functionاحتاج منكم كلمتين مجرد تعريف كل واحدة منهم وامتى باستخدمهم وازاى على مثال واحد بس مش اكتر على جدول حقيقي زى emp , dept اى حاجة مش مهم المهم مثال حقيقي مشروح افهم منه مش اكتر .انا اسفة يا جماعة بس والله حاولت افهم من الدروس لكن مقدرتش وميرسي جدا جدا جدا لاي اخ يبدى اى مساعدة وميرسى ليكم سواء ساعدتموني او لا .اختكم نورا . تقديم بلاغ
بتاريخ: 30 أغسطس 200619 سنة comment_77617 بس ياسيدى انا مش ممتاز فى الاوراكل ولكن ممكن ابسط الامور ز اتمنى ان يكون شرحى بسيط ويكون ودقيقفى البدايه لازم تعرف البوك block : دة اللى بتكتب فيه مجموعة الاكواد بتعتك وبيوضح اكتر فى الفورم مما يتكون ال block declare (optional) اختيارى . . . begin . . . Exception (optional) اختيارى . . . end; الشرحdeclareتكتب حينما تريد تعريف متغيرات او مؤشرات وهى اختياريه لانه من الممكن ان يكون البلوك الخاص بك مكون من begin and end beginتكتب حينما ترغب فى بدايه تنفيذ الاكواد اى تعرف ال compile ان ما بين begin and end هى بلوك من الاكواد.exception من الطبيعى انة تحدث اخطاء سواء كانت من المستخدم او النظام مثل 1- اخطاء المستخدم 1- انت مصمم حقل نوع البيانات ارقام و المستخدم ادخل حروف . 2- مستخدم يقوم بعمل بحث التصميم ان يضع النتيجه فى متغير واحد ولكن النتيجه جلبة اكثر من واحد .و اشياء كثيرههههه2- اخطاء النظام 1- عدم اتمام عملية log on .. يعنى من الاخير ال exception دى عشان لما يحصل خطاء تقدر تعلجه فى هذه المنطقه اللى انت بتكون محدد ايه الخطاء و ايه علاجه واو يعمل ايه فة الخطاء .اولآ : cursor المؤشر . declare a number; cursor ehab is/as select empno from emp where ename ='ehab'; begin open ehab; loop fetch ehab into a; exit when ehab%notfound; end loop; close ehab; end; المؤشر هو عباره عن pointer يقف فى المكان اللى انت تحدده فى الجدول و يتم تعريفه فى منطقة التعريفات لانه يحجز مكان فى الذاكره حتى يخزن بها الناتج من تنفيذ الاستعلام .وطبعآ ده ابسط نوع من انواع المؤشراتثالثآ procedure الاجراء :هو عباره عن مجموعة اكواد مكتوبه و تكون لها اسم و السبب الاساسى لوجوده هو عدم تكرار الاكواد اى عندما تكون تريد استخدام نفس الاكود فى اكثر من مكان فى نفس المشروع فبدل من اعاده كتابتها بتكتب اسم الاجراء create or replace procedure query_emp(p_id in out emp.empno%type, p_name out emp.ename%type, p_sal out emp.sal%type, p_comm out emp.comm%type) as begin select ename,sal,comm into p_name,p_sal,p_comm from emp where empno=p_id; end query_emp; تقديم بلاغ
بتاريخ: 30 أغسطس 200619 سنة كاتب الموضوع comment_77619 مش عارفة اقولك بجد ميرسي ليك لانك اهتمت بأمرى والف شكرا .ولكن اتمني ان تبسط شرح cursor و procedure اكتر من كده شوية لانك مدخل فيه فىprocedure مدخل فيه % rowtype وانا مش عارفه تقصد بيها ايه وبالنسبة لل cursor امتى بستخدمه بالتحديد وكذلك Loop لو تقدر تشرحه يبقى كتر خيرك معلش بتقل عليك فياريت تستحملنى .اختك نورا. تقديم بلاغ
بتاريخ: 30 أغسطس 200619 سنة comment_77622 بس ياسيدى ال cursor ده انا بستخدمه لما احب اجيب بيانات من اى جدول ذى ما هو مكتوزب فى المثال السابق و ال cursor ده ليه مجموعة خصائص بتفدنى فى حاجات ذى 1- %ISOPEN اذا كان ال cursor مفتوح ولا لاااااا و دى بترجع منطقى true or false 2- %NOTFOUND ودى اذا ال cursor لم يد بيانات 3-%FOUND ودى لو وجد بيانات 4- %ROWCOUNT ودى عدد السجلات التى وجدهايعنى الخلاصة ان ال cursor ده التطوير لجملة ال select اما الprocedure انت دلوقتى بتعمل مشروع شؤون عاملين وانت لازم تعمل تحديث لبيانات الموظفين فى اربع اماكن ما هو الحل ؟؟؟؟؟؟؟؟؟؟؟؟؟؟ تكتب الاكواد بتعتك 4مرات ( مش كتير ) ملحوظه : فى قعده فى البرمجه بتقول ان المبرمج الشاطر اللى يعمل اللى هو عوزه فى اقل عدد سطور و كمان دقة عاليه يعنى لو انت كتبت الاكواد بتعتك 4 مرات تكون كسرت القاعده اما الافضل هو عمل الاجراء .شرح الاجراءبس فى البدايه انت عاوز تنشاء يعنى بكتب create وبعدها انت بتحدد ايه اللى عاوز تنشائه proceduer و كمان لازم تحدد اسمه عشان تعرف تنادى عليه . وبعدها تحدد انواع المتغيرات اللى هتتعامل معاها و هى ادخالin اخراج out و ادخال اخراج in out يعنى لو انت عندك شرط انت لازم تبعت قيمة الشرط اكيد مش هتبعتها فى تكسى اكيد فى متغير و ده ال in و لو انت عاوز تخرج نتيجة الاجراء كيد مش هتخرجها مع واحد صحبك و لكن فى out و لو انت عاوز نفس المتغير اللى داخل ياخد معاه الناتج و يخرج بيه يكون ده ال in out . و باقى الكود اللى انت عاوز تعمله اعمله .اتمنى يكون الشرح بسيط و وصلايهاب وجدى تقديم بلاغ
بتاريخ: 30 أغسطس 200619 سنة comment_77624 ال loop لو انت عاوز تعمل جدول ضرب هل من الممكن ان تكتب 1*1=1 الى جدول رقم 12 طبعآ مرهقة جدآآآآآولكن لو انا هاعمل عمليه تكراريه بأستخدام for loop بسعلى الكود الاول بعدين نتكلم DECLARE TYPE num_array IS TABLE OF number(4) INDEX BY BINARY_INTEGER; i number(4); b number(4); num num_array; BEGIN FOR i IN 1..10 LOOP for b in 1..10 loop num( := i * b; DBMS_OUTPUT.PUT_LINE(i || '*' || b || '= ' || num( ); end loop; END LOOP; END; بس الفور دى انا بقولو يعمل التكرار من اول فين ز لغايت فين يعنى من 1 الى 10 و هنا بنعبر عنها من خلال( .. ) و عشان اخرج الناتج لازم استخدم باكج اسمها DBMS_OUTPUT.PUT_LINE وطبعآ الفكره هنا ان فى 2 loop عشان تلف من جدول 1 الى 10 و كل جدول من الجداول تلف من 1 الى 10 و طبعآ نوع المتغير اللى شايل الناتيجه لازم يكون array عشان يحما اكثر من قيمه و تعريفة ذى ما انت شايف ايهاب وجدى تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.