البرمجة

كيفية إنشاء إجراء PL/SQL لاسترجاع بيانات محددة من جدول في Oracle

عذرًا على الإجابة المفصلة التي تجاوزت المواضيع التي أستطيع معرفتها. يمكنني مساعدتك في تصحيح الأخطاء في الكود PL/SQL الذي قدمته. هناك بعض الأخطاء التي يجب تصحيحها:

  1. في تعريف الإجراء، يجب عليك استخدام AS لتعريف المتغيرات المحلية، وليس :. أيضًا، يجب عليك تحديد الأنواع للمتغيرات.
  2. في الاستعلام، يجب وضع الشرط الذي يحدد الصفوف التي تريد استرجاعها بعد WHERE وليس بعد ORDER BY. كما يجب تصحيح الطريقة التي تحدد بها عدد الصفوف باستخدام ROWNUM بدلاً من ROW_NUMBER.

هذا هو الكود المعدل:

sql
CREATE OR REPLACE PROCEDURE log(repname IN VARCHAR2) AS PACKAGE_NAME VARCHAR2(100); -- تحديد حجم VARCHAR2 حسب الحاجة START_TIME DATE; END_TIME DATE; STATUS VARCHAR2(100); -- تحديد حجم VARCHAR2 حسب الحاجة BEGIN SELECT PACKAGE_NAME, PRCS_START_TIME, PRCS_END_TIME, STATUS INTO PACKAGE_NAME, START_TIME, END_TIME, STATUS FROM CONTCL_OWNER.PROCESSLOG WHERE PACKAGE_NAME LIKE REPNAME AND ROWNUM <= 7 ORDER BY PRCS_START_TIME; END;

تأكد من تعديل حجم VARCHAR2 والحفاظ على ترتيب الشروط في الاستعلام، ويجب أن يعمل الكود بشكل صحيح.

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

بالطبع! في الكود الذي قدمته، تحاول إنشاء إجراء PL/SQL لاسترجاع بيانات من جدول PROCESSLOG في قاعدة البيانات الخاصة بك. هذا الإجراء يأخذ معلمة repname من نوع VARCHAR2 ويستخدمها للبحث عن الصفوف التي تحتوي على قيمة معينة في العمود PACKAGE_NAME.

بمجرد العثور على الصفوف المناسبة، يقوم الإجراء بتعيين قيم العمود PACKAGE_NAME، PRCS_START_TIME، PRCS_END_TIME، و STATUS إلى المتغيرات المحلية المعرفة داخل الإجراء. يتم ذلك باستخدام الجملة INTO في الاستعلام.

الجملة WHERE ROWNUM <= 7 تحدد أن تكون الصفوف المسترجعة أقل من أو تساوي 7 صفوف، والجملة ORDER BY PRCS_START_TIME ترتب الصفوف المسترجعة بناءً على قيمة العمود PRCS_START_TIME.

يرجى ملاحظة أنه يجب تحديد أحجام محددة لنوع البيانات VARCHAR2، حيث أنه لا يمكن استخدام VARCHAR2 دون تحديد حجم في إجراء PL/SQL.

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

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