برنامه نویسی

مکان نما در انجمن PLSQL – DEV

Summarize this content to 400 words in Persian Lang

مبانی مکان نما

در PL/SQL، نشانگرهای صریح را می توان به دو روش اصلی استفاده کرد: با کنترل دستی مکان نما با استفاده از عبارت OPEN، FETCH و CLOSE، یا با استفاده از a مکان نما برای حلقه که این مراحل را خودکار می کند.

1. استفاده از FETCH با کنترل دستی مکان نما

در این روش باید به صورت دستی:

مکان نما را باز کنید.
واکشی ردیف ها با استفاده از FETCH.
مکان نما را ببندید.

2. استفاده از مکان نما FOR Loop

با یک حلقه مکان نما FOR، PL/SQL به طور خودکار:

مکان نما را باز می کند.
هر ردیف را در یک رکورد واکشی می کند.
وقتی همه ردیف‌ها پردازش می‌شوند، مکان‌نما را می‌بندد.

مرحله 1: یک جدول نمونه ایجاد کنید

ما با ایجاد یک جدول نمونه به نام کارکنان و درج برخی از داده ها در آن شروع می کنیم.

ایجاد جدول

— Create a sample table ’employees’
CREATE TABLE employees (
employee_id NUMBER(5),
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

درج در جدول

— Insert sample data into the ’employees’ table
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1, ‘John’, ‘Doe’);
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (2, ‘Jane’, ‘Smith’);
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (3, ‘Alice’, ‘Johnson’);
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (4, ‘Bob’, ‘Brown’);
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (5, ‘Charlie’, ‘Davis’);

Commit the transaction to save the data

COMMIT;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: استفاده از مکان نما دستی با FETCH

اکنون، بیایید نحوه استفاده از مکان‌نمای صریح با FETCH برای بازیابی و پردازش داده‌ها را ردیف به ردیف نشان دهیم.

DECLARE
— Declare the cursor
CURSOR emp_cursor IS
SELECT employee_id, first_name, last_name FROM employees;

— Declare variables to store the fetched data
v_emp_id employees.employee_id%TYPE;
v_first_name employees.first_name%TYPE;
v_last_name employees.last_name%TYPE;

BEGIN
— Open the cursor
OPEN emp_cursor;

— Fetch each row from the cursor
LOOP
FETCH emp_cursor INTO v_emp_id, v_first_name, v_last_name;

— Exit the loop when no more rows are fetched
EXIT WHEN emp_cursor%NOTFOUND;

— Display the data
DBMS_OUTPUT.PUT_LINE
(‘ID: ‘ || v_emp_id || ‘, Name: ‘ || v_first_name || ‘ ‘ || v_last_name);
END LOOP;

— Close the cursor
CLOSE emp_cursor;
END;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی مورد انتظار:

ID: 1, Name: John Doe
ID: 2, Name: Jane Smith
ID: 3, Name: Alice Johnson
ID: 4, Name: Bob Brown
ID: 5, Name: Charlie Davis

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

مکان نما emp_cursor شناسه، first_name و last_name را از جدول کارکنان انتخاب می کند.
عبارت OPEN مکان نما را باز می کند.
دستور FETCH هر ردیف را از مکان نما بازیابی می کند و آن را در متغیرهای v_emp_id، v_first_name و v_last_name ذخیره می کند.
این حلقه تا زمانی ادامه می یابد که ردیف دیگری برای واکشی وجود نداشته باشد (emp_cursor%NOTFOUND).
پس از پردازش تمام ردیف ها، مکان نما با استفاده از CLOSE بسته می شود.

مرحله 3: استفاده از مکان نما FOR Loop

در اینجا نحوه رسیدن به همان نتیجه با یک حلقه مکان نما برای شما آورده شده است. این روش نیاز به دستورات OPEN، FETCH و CLOSE را از بین می برد.

DECLARE
— Declare the cursor
CURSOR emp_cursor IS
SELECT employee_id, first_name, last_name FROM employees;
BEGIN
— Use a Cursor FOR Loop to process each row
FOR emp_record IN emp_cursor LOOP
DBMS_OUTPUT.PUT_LINE(‘ID: ‘ || emp_record.employee_id || ‘, Name: ‘
|| emp_record.first_name || ‘ ‘ || emp_record.last_name);
END LOOP;
END;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Expected Output:

ID: 1, Name: John Doe
ID: 2, Name: Jane Smith
ID: 3, Name: Alice Johnson
ID: 4, Name: Bob Brown
ID: 5, Name: Charlie Davis

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

مکان نما emp_cursor به همان روش قبلی اعلام می شود.
حلقه مکان نما FOR به طور خودکار چرخه زندگی مکان نما را کنترل می کند، آن را در ابتدای حلقه باز می کند، هر ردیف را واکشی می کند و پس از اتمام حلقه آن را می بندد.
هر ردیف در متغیر emp_record واکشی می شود و می توان به فیلدهای آن با استفاده از علامت نقطه (emp_record.employee_id، emp_record.first_name و غیره) دسترسی پیدا کرد.
نیازی به باز کردن، واکشی یا بستن مکان نما نیست—PL/SQL این کار را برای شما انجام می دهد.

نتیجه گیری:

مکان نما دستی با FETCH زمانی مفید است که به کنترل دقیق بر رفتار مکان نما نیاز دارید، مانند واکشی مشروط ردیف ها یا انجام عملیات بین واکشی.

Use this method if you need finer control over cursor operations,
such as handling partial results, conditional fetching,
or performing complex logic between fetches.

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حلقه مکان نما FOR برای تکرار در تمام ردیف ها راحت تر است در مکان نما بدون نیاز به مدیریت دستی چرخه زندگی مکان نما. کد را ساده می کند و به طور کلی هنگام پردازش ترجیح داده می شود تمام ردیف ها به ترتیب

Use this method for simplicity when you need to fetch and process
all rows from the cursor without additional control requirements.
It automatically manages the cursor lifecycle and
reduces boilerplate code.

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ویژگی های مکان نما: –

% FOUND: اگر آخرین واکشی یک ردیف را برگرداند، TRUE برمی‌گرداند، در غیر این صورت FALSE.% یافت نشد: اگر آخرین واکشی یک ردیف را برنگرداند، TRUE را برمی‌گرداند، در غیر این صورت FALSE.%ROWCOUNT: تعداد ردیف‌های واکشی شده تا کنون را برمی‌گرداند.%ISOPEN: اگر مکان نما باز باشد، TRUE، در غیر این صورت FALSE را برمی گرداند.

مبانی مکان نما

در PL/SQL، نشانگرهای صریح را می توان به دو روش اصلی استفاده کرد: با کنترل دستی مکان نما با استفاده از عبارت OPEN، FETCH و CLOSE، یا با استفاده از a مکان نما برای حلقه که این مراحل را خودکار می کند.

1. استفاده از FETCH با کنترل دستی مکان نما

در این روش باید به صورت دستی:

  • مکان نما را باز کنید.
  • واکشی ردیف ها با استفاده از FETCH.
  • مکان نما را ببندید.

2. استفاده از مکان نما FOR Loop

با یک حلقه مکان نما FOR، PL/SQL به طور خودکار:

  • مکان نما را باز می کند.
  • هر ردیف را در یک رکورد واکشی می کند.
  • وقتی همه ردیف‌ها پردازش می‌شوند، مکان‌نما را می‌بندد.

مرحله 1: یک جدول نمونه ایجاد کنید

ما با ایجاد یک جدول نمونه به نام کارکنان و درج برخی از داده ها در آن شروع می کنیم.

ایجاد جدول


-- Create a sample table 'employees'
CREATE TABLE employees (
    employee_id   NUMBER(5),
    first_name    VARCHAR2(50),
    last_name     VARCHAR2(50)
);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

درج در جدول


-- Insert sample data into the 'employees' table
INSERT INTO employees (employee_id, first_name, last_name) 
VALUES (1, 'John', 'Doe');
INSERT INTO employees (employee_id, first_name, last_name) 
VALUES (2, 'Jane', 'Smith');
INSERT INTO employees (employee_id, first_name, last_name) 
VALUES (3, 'Alice', 'Johnson');
INSERT INTO employees (employee_id, first_name, last_name) 
VALUES (4, 'Bob', 'Brown');
INSERT INTO employees (employee_id, first_name, last_name) 
VALUES (5, 'Charlie', 'Davis');

Commit the transaction to save the data

COMMIT;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


مرحله 2: استفاده از مکان نما دستی با FETCH

اکنون، بیایید نحوه استفاده از مکان‌نمای صریح با FETCH برای بازیابی و پردازش داده‌ها را ردیف به ردیف نشان دهیم.


DECLARE
   -- Declare the cursor
   CURSOR emp_cursor IS
      SELECT employee_id, first_name, last_name FROM employees;

   -- Declare variables to store the fetched data
   v_emp_id employees.employee_id%TYPE;
   v_first_name employees.first_name%TYPE;
   v_last_name employees.last_name%TYPE;

BEGIN
   -- Open the cursor
   OPEN emp_cursor;

   -- Fetch each row from the cursor
   LOOP
      FETCH emp_cursor INTO v_emp_id, v_first_name, v_last_name;

      -- Exit the loop when no more rows are fetched
      EXIT WHEN emp_cursor%NOTFOUND;

      -- Display the data
      DBMS_OUTPUT.PUT_LINE
('ID: ' || v_emp_id || ', Name: ' || v_first_name || ' ' || v_last_name);
   END LOOP;

   -- Close the cursor
   CLOSE emp_cursor;
END;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی مورد انتظار:

ID: 1, Name: John Doe
ID: 2, Name: Jane Smith
ID: 3, Name: Alice Johnson
ID: 4, Name: Bob Brown
ID: 5, Name: Charlie Davis

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

  1. مکان نما emp_cursor شناسه، first_name و last_name را از جدول کارکنان انتخاب می کند.

  2. عبارت OPEN مکان نما را باز می کند.

  3. دستور FETCH هر ردیف را از مکان نما بازیابی می کند و آن را در متغیرهای v_emp_id، v_first_name و v_last_name ذخیره می کند.

  4. این حلقه تا زمانی ادامه می یابد که ردیف دیگری برای واکشی وجود نداشته باشد (emp_cursor%NOTFOUND).

  5. پس از پردازش تمام ردیف ها، مکان نما با استفاده از CLOSE بسته می شود.


مرحله 3: استفاده از مکان نما FOR Loop

در اینجا نحوه رسیدن به همان نتیجه با یک حلقه مکان نما برای شما آورده شده است. این روش نیاز به دستورات OPEN، FETCH و CLOSE را از بین می برد.


DECLARE
   -- Declare the cursor
   CURSOR emp_cursor IS
      SELECT employee_id, first_name, last_name FROM employees;
BEGIN
   -- Use a Cursor FOR Loop to process each row
   FOR emp_record IN emp_cursor LOOP
      DBMS_OUTPUT.PUT_LINE('ID: ' || emp_record.employee_id || ', Name: ' 
|| emp_record.first_name || ' ' || emp_record.last_name);
   END LOOP;
END;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Expected Output:

ID: 1, Name: John Doe
ID: 2, Name: Jane Smith
ID: 3, Name: Alice Johnson
ID: 4, Name: Bob Brown
ID: 5, Name: Charlie Davis

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

  1. مکان نما emp_cursor به همان روش قبلی اعلام می شود.

  2. حلقه مکان نما FOR به طور خودکار چرخه زندگی مکان نما را کنترل می کند، آن را در ابتدای حلقه باز می کند، هر ردیف را واکشی می کند و پس از اتمام حلقه آن را می بندد.

  3. هر ردیف در متغیر emp_record واکشی می شود و می توان به فیلدهای آن با استفاده از علامت نقطه (emp_record.employee_id، emp_record.first_name و غیره) دسترسی پیدا کرد.

  4. نیازی به باز کردن، واکشی یا بستن مکان نما نیست—PL/SQL این کار را برای شما انجام می دهد.

نتیجه گیری:

مکان نما دستی با FETCH زمانی مفید است که به کنترل دقیق بر رفتار مکان نما نیاز دارید، مانند واکشی مشروط ردیف ها یا انجام عملیات بین واکشی.

Use this method if you need finer control over cursor operations, 
such as handling partial results, conditional fetching, 
or performing complex logic between fetches.

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حلقه مکان نما FOR برای تکرار در تمام ردیف ها راحت تر است
در مکان نما بدون نیاز به مدیریت دستی چرخه زندگی مکان نما.
کد را ساده می کند و به طور کلی هنگام پردازش ترجیح داده می شود
تمام ردیف ها به ترتیب

Use this method for simplicity when you need to fetch and process 
all rows from the cursor without additional control requirements. 
It automatically manages the cursor lifecycle and 
reduces boilerplate code.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


ویژگی های مکان نما:

% FOUND: اگر آخرین واکشی یک ردیف را برگرداند، TRUE برمی‌گرداند، در غیر این صورت FALSE.
% یافت نشد: اگر آخرین واکشی یک ردیف را برنگرداند، TRUE را برمی‌گرداند، در غیر این صورت FALSE.
%ROWCOUNT: تعداد ردیف‌های واکشی شده تا کنون را برمی‌گرداند.
%ISOPEN: اگر مکان نما باز باشد، TRUE، در غیر این صورت FALSE را برمی گرداند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا