الخطأ الذي تواجهه يعود إلى استخدامك للمتغير &messid في عبارة WHERE في عبارة DECLARE CURSOR. في PL/SQL ، لا يمكنك استخدام متغير مباشرة في عبارة DECLARE CURSOR. بدلاً من ذلك ، يجب عليك استخدام متغير في جملة OPEN CURSOR.
لحل هذا المشكلة ، يمكنك استخدام متغير تعريفه في البداية واستخدامه لاحقًا في جملة OPEN CURSOR.
هذا كيف يمكن تعديل الكود:
sqlDECLARE
v_messid studentsmessdata.messid%TYPE;
CURSOR currsor1 IS
SELECT messid,
studentname,
messname
FROM studentsmessdata
WHERE messid = v_messid;
BEGIN
-- تعيين قيمة المتغير v_messid بقيمة المدخل المطلوب
v_messid := &messid;
-- فتح ال cursor
OPEN currsor1;
-- اختيار البيانات أو تنفيذ أي عمليات أخرى هنا
-- إغلاق ال cursor
CLOSE currsor1;
END;
/
يرجى ملاحظة أنه يجب عليك تعديل الكود ليتناسب مع هيكل الجدول الفعلي (studentsmessdata) الذي تعمل عليه.
المزيد من المعلومات
بالتأكيد! في الكود السابق، قمت بتعريف متغير v_messid
من نوع العمود messid
في جدول studentsmessdata
باستخدام %TYPE
. هذا يضمن تطابق نوع المتغير مع نوع العمود في قاعدة البيانات، مما يحمي الكود من أخطاء النوع.
بعد ذلك، تم فتح ال cursor currsor1
باستخدام الجملة OPEN currsor1;
. يمكنك هنا استخدام ال cursor لاسترداد البيانات أو تنفيذ أي عمليات أخرى التي تحتاج إلى الوصول إلى البيانات.
بعد اكتمال عمليات ال cursor، يجب أن تقوم بإغلاقه باستخدام الجملة CLOSE currsor1;
. هذا مهم لتحرير الموارد التي استخدمها ال cursor وتفادي أخطاء الأداء الناتجة عن ترك ال cursors مفتوحة لفترات طويلة.