Procedure

  • إجمالي تكلفة المنتج المنتهي في SQL

    لفهم كيفية إنشاء إجراء (Procedure) في قاعدة البيانات الخاصة بك لعرض قائمة بجميع عناصر المنتجات المنتهية (ProductFinished)، وعرض المكونات، مع سعر الوحدة للمكون وإجمالي تكلفة المنتج المنتهي، يجب أولاً عمل استعلام (Query) يستخدم دالة الـ SUM لحساب إجمالي التكلفة لكل منتج منتهي. ثم، يجب إنشاء إجراء يستدعي هذا الاستعلام ويقوم بتنسيق النتائج بالشكل المطلوب.

    في البداية، قم بإنشاء الاستعلام الذي يعيد البيانات التي تحتاجها. لاحظ أن الجدول ProductRawMaterial هو الذي يحتوي على معلومات المكونات وأسعارها:

    sql
    SELECT pf.NameFInishedProduct AS ProductName, pr.NameRawProduct AS IngredientName, pr.BuyPrice AS UnitPrice, COUNT(pr.NameRawProduct) AS Quantity, SUM(pr.BuyPrice) AS TotalIngredientCost FROM ProductFinished pf JOIN ProductRawMaterial pr ON pf.ID_FinishedProduct = pr.ID_FinishedProduct GROUP BY pf.NameFInishedProduct, pr.NameRawProduct, pr.BuyPrice

    ثم، يمكنك استخدام هذا الاستعلام في إنشاء إجراء يقوم بتنسيق النتائج كما تحتاج. وهنا يكون الاجراء مثاليًا لتنسيق النتائج وإرجاعها بالشكل المطلوب:

    sql
    CREATE PROCEDURE GetFinishedProductDetails AS BEGIN SELECT 'The product ' + pf.NameFInishedProduct + ' is composed of' AS ProductDetails, CAST(COUNT(pr.NameRawProduct) AS NVARCHAR) + ' ' + pr.NameRawProduct + ' priced ' + CAST(pr.BuyPrice AS NVARCHAR) + ' € each' AS IngredientDetails, 'The total price of the ' + pf.NameFInishedProduct + ' is ' + CAST(SUM(pr.BuyPrice) AS NVARCHAR) + ' €.' AS TotalPrice FROM ProductFinished pf JOIN ProductRawMaterial pr ON pf.ID_FinishedProduct = pr.ID_FinishedProduct GROUP BY pf.NameFInishedProduct, pr.NameRawProduct, pr.BuyPrice END

    يجب أن يساعد هذا الإجراء في عرض المنتجات المنتهية ومكوناتها مع تكلفتها الإجمالية بالشكل المطلوب. يمكنك تنفيذ الإجراء باستخدام الاستدعاء التالي:

    sql
    EXEC GetFinishedProductDetails

    يرجى ملاحظة أنه قد تحتاج إلى ضبط الاستعلام والإجراء بناءً على هيكل قاعدة البيانات الفعلي الذي تعمل عليه، وقد تحتاج إلى تغيير بعض التفاصيل حسب ذلك.

    المزيد من المعلومات

    لتحسين استعلامك وتجنب الأخطاء المحتملة، يمكنك إضافة بعض المعلومات الإضافية والتحسينات إلى الاستعلام والإجراء. على سبيل المثال، يمكنك استخدام دالة CONCAT لتوحيد النصوص بدلاً من استخدام العمليات الرياضية، ويمكنك أيضًا تحسين عرض النتائج لجعله أكثر وضوحًا. إليك الإجراء المحدث:

    sql
    CREATE PROCEDURE GetFinishedProductDetails AS BEGIN SELECT CONCAT('The product ', pf.NameFInishedProduct, ' is composed of') AS ProductDetails, CONCAT(COUNT(pr.NameRawProduct), ' ', pr.NameRawProduct, ' priced ', pr.BuyPrice, ' € each') AS IngredientDetails, CONCAT('The total price of the ', pf.NameFInishedProduct, ' is ', SUM(pr.BuyPrice), ' €.') AS TotalPrice FROM ProductFinished pf JOIN ProductRawMaterial pr ON pf.ID_FinishedProduct = pr.ID_FinishedProduct GROUP BY pf.NameFInishedProduct, pr.NameRawProduct, pr.BuyPrice END

    هذا التحسين يجعل النتائج أكثر وضوحًا وسهولة قراءة. كما يمكنك تحسين الإجراء بإضافة تعليقات للتوضيح وتحسين الأداء بتعيين قيم افتراضية للمدخلات إذا لزم الأمر.

  • تحديث حالة الحجوزات اليومية في Oracle PL/SQL

    عند تفحص الكود الخاص بك، يظهر أن هناك أخطاء في البنية اللغوية والتركيبية التي تسبب في حدوث خطأ PLS-00103. الخطأ يظهر في السطر 14 حيث تحاول استخدام الجملة IF SELECT TRUNC((SYSDATE) -TO_DATE(@FCH_GRABACION, 'DD/MM/YYYY HH24:MI:SS')) From DUAL=1 THEN، والتي لا تتبع بنية صحيحة للجملة الشرطية في PL/SQL.

    لتصحيح هذا الخطأ، يجب أن يكون الشرط داخل جملة IF بشكل صحيح، ويمكن تحقيق ذلك عن طريق تخزين النتيجة المرتقبة في متغير ومن ثم استخدام هذا المتغير في الشرط. إليك تصحيح للكود:

    PLSQL
    CREATE OR REPLACE PROCEDURE "USP_MSC_MODIFICA_ESTADO" AS CURSOR RESERVAR IS SELECT ID_RESERVA, FCH_GRABACION FROM tb_msc_reserva WHERE TO_DATE(TO_CHAR(FCH_GRABACION, 'DD/MM/YYYY'), 'DD/MM/YYYY') = TO_DATE(TO_CHAR(SYSDATE - 1, 'DD/MM/YYYY'), 'DD/MM/YYYY'); id_reserva VARCHAR2(50); fch_grabacion DATE; BEGIN OPEN RESERVAR; FETCH RESERVAR INTO id_reserva, fch_grabacion; WHILE RESERVAR%FOUND LOOP -- حسب فهمي، تحتاج إلى حساب فرق التواريخ والتحقق من أنه يساوي 1 يوم IF TRUNC(SYSDATE) - TO_DATE(FCH_GRABACION, 'DD/MM/YYYY HH24:MI:SS') = 1 THEN UPDATE inv.tb_msc_reserva t SET t.flg_estado = 'C' WHERE t.ID_Reserva = id_reserva; COMMIT; END IF; FETCH RESERVAR INTO id_reserva, fch_grabacion; END LOOP; CLOSE RESERVAR; END; /

    يرجى مراجعة الكود المعدل وتجربته للتأكد من أنه يلبي احتياجاتك. إذا كنت بحاجة إلى مساعدة إضافية أو لديك أسئلة أخرى، فلا تتردد في طرحها.

    المزيد من المعلومات

    بالطبع، سأقدم لك مزيدًا من المعلومات حول الكود البرمجي الذي قدمته. يهدف الكود إلى إنشاء إجراء (Procedure) في قاعدة بيانات Oracle، والذي يقوم بتحديث حالة الحجز (flg_estado) في جدول tb_msc_reserva عندما يتوافق تاريخ الحجز (FCH_GRABACION) مع تاريخ اليوم السابق.

    لنلقي نظرة أعمق على الكود:

    1. فتح الـ Cursor:

      • يتم استخدام CURSOR لاستعراض نتائج الاستعلام في جدول tb_msc_reserva واستخراج ID_RESERVA و FCH_GRABACION.
    2. الحلقة While:

      • يتم فتح الـ Cursor واسترجاع السجلات باستخدام FETCH.
      • يستخدم WHILE RESERVAR%FOUND لتكرار العمليات حتى لا يتم الوصول إلى نهاية النتائج.
    3. التحقق من تاريخ الحجز:

      • يستخدم الكود TRUNC(SYSDATE) - TO_DATE(FCH_GRABACION, 'DD/MM/YYYY HH24:MI:SS') لحساب فرق التواريخ.
      • إذا كان الفرق يساوي 1 يوم، يتم تحديث حالة الحجز (flg_estado) إلى ‘C’ في الجدول tb_msc_reserva.
    4. التزام البيانات:

      • يتم استخدام COMMIT لتأكيد التحديث وحفظ التغييرات في الجدول.
    5. إغلاق الـ Cursor:

      • يتم إغلاق الـ Cursor بعد الانتهاء من عمليات الاستعلام والتحديث.

    من المهم أن يتم تفهم أن هذا الكود يعتمد على تفاصيل تنظيم الجدول وهيكله. قد تحتاج إلى ضبط الكود بما يتناسب مع بنية جدولك ومتطلباتك الخاصة.

    يرجى تجربة الكود في بيئة اختبار قبل استخدامه في الإنتاج للتأكد من أنه يعمل كما هو متوقع ويتفاعل بشكل صحيح مع بياناتك. إذا كنت بحاجة إلى مساعدة إضافية أو لديك أسئلة أخرى، فأنا هنا للمساعدة.

  • مصطلحات أساسية في البرمجة

    ما هي المصطلحات التي تتكر كثيرا عند كل مبرمج ؟

    كما هو الحال بالنسبة لأي مهارة ، من الضروري تعلم المصطلحات الأساسية المستخدمة في هذا المجال قبل الانتقال إلى وضع الممارسة بشكل كامل.حيث انه تساعدك معرفة المصطلحات على فهم مجالك بشكل أفضل وأسرع. إذا كنت تتعلم البرمجة أو كنت حديث العهد بعلوم الكمبيوتر ، فنحن نقدم لك بعض المصطلحات الهامة في علوم الكمبيوتر والبرمجة والتي يمكن أن تكون بمثابة دليل التعلم الخاص بك 101

    🔸 المتغيرات Variables

    المتغيرات هي عبارة عن مواقع في الذاكرة تخزن البيانات بشكل مؤقت ويمكن تغيير قيمتها أثناء تنفيذ البرنامج. فمثلا يمكن للبرنامج أن يُخزن في المتغير Var1 القيمة 1 ثم يخزن القيمة 2، والقيمة التي سترجع من المتغير
    هي آخر قيمة تم تخزينها.

    ‏🔸 الثوابت Constant

    هي عبارة عن مواقع في الذاكرة تُخزن فيها البيانات بشكل مؤقت ولكن لا يمكن تغيير قيمتها أثناء تنفيذ البرنامج. فمثلا يُمكن للبرنامج أن يخزن في الثابت Con1 القيمة 1 لكنه لا يستطيع تغييرها وإن حاول تغييرها فإن المترجم يُرسل رسالة خاطئة أثناء تنفيذ البرنامج.

    ‏🔸 الحدث Event

    هو عبارة عن فعل يقوم به المستخدم للبرنامج المصمم كالنقر على أداة “الزر Button” أو تغيير نص في مربع نص “Text Box” أو حتى تحريك الماوس أو الفأرة ويرافقه تنفيذ الإجراء المتعلق به.

    ‏🔸 الإجراء Procedure

    هو عملية أو عمليات ينفذها البرنامج عند تحقق حدث معين كالنقر على أداة الزر “Button” في البرنامج.

    🔸 الكائن object

    قد يكون تعريف لكود أداة تحكم مثل الزر “Button” ويكون له عدة إجراءات.

    🔸 الكود أو “الشفرة البرمجية” Code

    هو عبارة عن أوامر برمجية تعطى للكمبيوتر على شكل نص تُكتب بواسطة لغة من لغات البرمجة كلغة “الفيجوال بيسك” والتي يفسرها مترجم يسمى ليفهمها الكمبيوتر ولكل وحدة نمطية أو أداة تحكم كود
    خاص به في الفيجوال بيسك. وقد يكون الكود مقسما إلى ‏كائنات “Objects”،
    ودالات أو توابع “Functions”، وإجراءات “Procedures”، و أحداث “Events”.

    🔸 المترجم Compiler

    هو أداة تقوم بترجمة البرنامج دفعة واحدة إلى لغة الآلة وتُنتج ملف تنفيذى بامتداد “exe –> executable file”، يعمل مباشرة بدون وسيط، وهذا يعنى أن لغات البرمجة المترجمة تقوم بتحويل النص البرمجى المكتوب بها إلى لغة الآلة مباشرة وتُنتج ملف تنفيذي، ‏

    🔸 المفسر Interpreter

    هو أداة تقوم بترجمة البرنامج إلى لغة الآلة سطر سطر، وهذا يعنى أن البرنامج المكتوب بلغات برمجة تفسيرية يتم ترجمته إلى نص برمجى وسيط بلغة منخفضة المستوى ( لغة وسيطة )، ويُنتَج ملف للبرنامج وبداخله هذا الكود, لذا لا يمكن تنفيذه على هذه الصورة مباشرة حيث يحتاج إلى ‏برنامج آخر يقوم بترجمة الأكواد المكتوبة بداخله إلى لغة الآلة، هذا البرنامج يسمى “المفسر”، ففي لغة الــJava مثلاً يُترجم النص البرمجى إلى كود وسيط يسمى “Byte code”، وتُنتج ملف بامتداد jar، هذا الكود البرمجي لا يُمكن تشغيله وتنفيذه على أي جهاز مباشرة حيث يحتاج إلى ما ‏يسمى “آلة جافا الافتراضية”، والتى تعمل كمفسر للبرنامج الناتج حتى يتم تنفيذه.
    تطبيقات الدوت نت أيضا تعتمد على نفس الأسلوب بحيث يتم تحويل الكود البرمجى المكتوب بلغة من لغات الدوت
    إلى لغة وسيطة منخفضة المستوى تسمى لغة “مايكروسوفت Visual Basic نت”.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر