البرمجة

تحديث حالة الحجوزات اليومية في 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 بعد الانتهاء من عمليات الاستعلام والتحديث.

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

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

مقالات ذات صلة

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

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

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