دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
Class Library در سی شارپ
1404/01/10 -
دستور BREAK در پایگاه داده sql
1404/01/02 -
دستور CONTINUE در پایگاه داده SQL
1404/01/01 -
دستور WAITFOR در پایگاه داده SQL
1403/12/26 -
دستور GOTO در پایگاه داده SQL
1403/12/25 -
حلقه WHILE در پایگاه داده SQL
1403/12/24
مکان نما(Cursor) در پایگاه داده اوراکل

مفهوم مکان نما(Cursor) در پایگاه داده اوراکل
مکاننما در پایگاه داده اوراکل (Cursor in Oracle Database) به عنوان یکی از مهمترین ویژگیهای زبان PL/SQL معرفی شده است.
مکاننماها به توسعهدهندگان اجازه میدهند که روی مجموعهای از رکوردها که از طریق یک پرسوجو انتخاب شدهاند، عملیات مختلفی مانند پیمایش، بروزرسانی و پردازش انجام دهند.
به عبارت دیگر، مکاننماها به عنوان واسطهای میان برنامه و دادههای بازیابی شده عمل میکنند و امکان پردازش سطر به سطر این دادهها را فراهم میآورند.
انواع مکاننما در پایگاه داده اوراکل
مکاننما در PL/SQL به نوعی اشاره به یک ناحیه حافظه در سرور پایگاه داده دارد که نتیجه یک دستور SQL در آن ذخیره میشود.
مکاننماها به دو دسته اصلی تقسیم میشوند:
-
مکاننمای ضمنی (Implicit Cursor)
هر زمانی که یک دستور SQL مانند SELECT INTO، INSERT، UPDATE یا DELETE در PL/SQL اجرا شود، اوراکل به طور خودکار یک مکاننما را بهصورت ضمنی ایجاد میکند تا نتایج عملیات را پردازش کند.
این مکاننماها توسط کاربر کنترل نمیشوند و توسط موتور پایگاه داده به طور خودکار مدیریت میشوند. -
مکاننمای صریح (Explicit Cursor)
مکاننماهای صریح توسط برنامهنویس تعریف و کنترل میشوند و معمولاً برای پردازش مجموعهای از رکوردها استفاده میشوند که از یک پرسوجو بازگشتهاند.
مکاننماهای صریح به کاربر اجازه میدهند که دادهها را به صورت سطر به سطر پردازش کند و عملیات مختلفی مانند پیمایش و بروزرسانی بر روی نتایج انجام دهد.
اجزای مکان نما در پایگاه داده اوراکل
مکاننماها از چند مرحله و بخش تشکیل شدهاند که هر یک نقشی مهم در پردازش دادهها ایفا میکنند. این مراحل عبارتند از:
-
تعریف مکاننما (Cursor Declaration)
مکاننما ابتدا باید تعریف شود. در این مرحله، دستور SQL که توسط مکاننما پردازش میشود، مشخص میشود. -
باز کردن مکاننما (Cursor Opening)
با باز کردن مکاننما، پرسوجوی SQL اجرا میشود و مجموعه نتایج در حافظه ذخیره میشود. -
خواندن دادهها از مکاننما (Fetching Rows)
پس از باز شدن مکاننما، میتوان دادهها را به صورت سطر به سطر از آن بازیابی کرد. -
بستن مکاننما (Closing Cursor)
پس از اتمام پردازش دادهها، مکاننما باید بسته شود تا منابع حافظه آزاد شوند.
مراحل ایجاد مکاننمای صریح
مکاننماهای صریح به طور مشخص توسط برنامهنویس ایجاد و مدیریت میشوند.
در زیر مراحل ایجاد و استفاده از یک مکاننمای صریح در PL/SQL آورده شده است:
-
تعریف مکاننما صریح
برای تعریف یک مکاننما، ابتدا باید نام آن را مشخص کرد و سپس دستور SQL مورد نظر را برای مکاننما تعیین کرد.
مثالی از تعریف یک مکاننما به شرح زیر است:
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, first_name, last_name FROM employees;
BEGIN
-- اینجا میتوان مکاننما را باز کرد و از آن استفاده کرد
END;
در این مثال، مکاننمای emp_cursor یک پرسوجوی SQL را که فهرستی از شناسههای کارمندان و نامهای آنها از جدول employees انتخاب میکند، تعریف میکند.
-
باز کردن مکاننما
پس از تعریف مکاننما، باید آن را باز کرد تا پرسوجوی SQL اجرا شود و دادهها در حافظه بارگذاری شوند.
برای باز کردن مکاننما، از دستور OPEN استفاده میشود:
BEGIN
OPEN emp_cursor;
END;
-
خواندن دادهها از مکاننما
برای خواندن سطرهای بازیابی شده توسط مکاننما، از دستور FETCH استفاده میشود.
دادهها را میتوان بهصورت سطر به سطر از مکاننما بازیابی کرد. مثالی از خواندن دادهها از مکاننما به صورت زیر است:
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, first_name, last_name FROM employees;
emp_id employees.employee_id%TYPE;
emp_first employees.first_name%TYPE;
emp_last employees.last_name%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_id, emp_first, emp_last;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(emp_id || ' ' || emp_first || ' ' || emp_last);
END LOOP;
CLOSE emp_cursor;
END;
در این مثال، مکاننما باز میشود و سپس دادههای سطر به سطر از آن بازیابی میشود و در متغیرهای emp_id، emp_first و emp_last ذخیره میشوند.
دستور EXIT WHEN emp_cursor%NOTFOUND بررسی میکند که آیا تمام سطرها پردازش شدهاند یا خیر، و در نهایت مکاننما بسته میشود.
-
بستن مکاننما
پس از پایان پردازش دادهها، مکاننما باید بسته شود تا منابع آزاد شوند. برای این منظور از دستور CLOSE استفاده میشود:
🌟 آیا آمادهاید تا در دنیای پایگاه دادهها بدرخشید؟ 🚀
با دوره آموزش پایگاه داده اوراکل ما، مهارتهای ضروری را یاد بگیرید و به چالشهای واقعی صنعت پاسخ دهید.
این دوره با محتوای عملی و آموزشهای کاربردی به شما کمک میکند تا به یک متخصص در این حوزه تبدیل شوید و فرصتهای شغلی جدیدی را کشف کنید.
ایجاد مکاننماهای پارامتری
در اوراکل، مکاننماها میتوانند پارامتر داشته باشند. این ویژگی به برنامهنویس اجازه میدهد که یک مکاننما را برای شرایط مختلف با استفاده از پارامترها تعریف کند.
در زیر مثالی از مکاننمای پارامتری آورده شده است:
DECLARE
CURSOR emp_cursor (p_department_id NUMBER) IS
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = p_department_id;
emp_id employees.employee_id%TYPE;
emp_first employees.first_name%TYPE;
emp_last employees.last_name%TYPE;
BEGIN
OPEN emp_cursor(10); -- باز کردن مکاننما با پارامتر
LOOP
FETCH emp_cursor INTO emp_id, emp_first, emp_last;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(emp_id || ' ' || emp_first || ' ' || emp_last);
END LOOP;
CLOSE emp_cursor;
END;
در این مثال، مکاننما یک پارامتر به نام p_department_id دارد که هنگام باز کردن مکاننما مقداردهی میشود. پرسوجوی SQL بر اساس این پارامتر اجرا میشود.
مکاننماهای FOR
در PL/SQL یک نوع سادهتر از استفاده از مکاننما وجود دارد که به آن Cursor FOR Loop میگویند.
این نوع حلقه بهطور خودکار مکاننما را باز، پیمایش و بسته میکند. مثالی از استفاده از FOR برای پیمایش مکاننما به شرح زیر است:
BEGIN
FOR emp_rec IN (SELECT employee_id, first_name, last_name FROM employees) LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.employee_id || ' ' || emp_rec.first_name || ' ' || emp_rec.last_name);
END LOOP;
END;
در این روش، نیازی به تعریف و مدیریت صریح مکاننما نیست، و PL/SQL بهطور خودکار مکاننما را مدیریت میکند.
مدیریت خطاهای مکاننما
در هنگام استفاده از مکاننماها ممکن است خطاهایی رخ دهد.
به عنوان مثال، اگر سعی کنید دادهها را از یک مکاننمای بسته بازیابی کنید، خطای INVALID_CURSOR رخ خواهد داد.
بنابراین مهم است که مطمئن شوید مکاننماها به درستی باز و بسته شدهاند.
برای مدیریت این خطاها میتوان از ساختارهای مدیریت استثناها (Exceptions) در PL/SQL استفاده کرد:
BEGIN
OPEN emp_cursor;
-- عملیات بر روی مکاننما
EXCEPTION
WHEN INVALID_CURSOR THEN
DBMS_OUTPUT.PUT_LINE('Error: The cursor is invalid or closed.');
END;
دوره های مرتبط

اموزش پایگاه داده اوراکل Oracle
در دوره آموزش پایگاه داده اوراکل اصول ، مفاهیم ، طراحی ، پیادهسازی و مدیریت پایگاه داده را به صورت جامع آموزش می دهیم .