برمجةتطوير الويبتكنيكالقواعد البيانات

الإجراءات المخزنة (Stored Procedures) في SQL: دليل شامل

مقدمة

الإجراءات المخزنة (Stored Procedures) تُعتبر واحدة من أهم ميزات أنظمة إدارة قواعد البيانات العلائقية (RDBMS)، حيث تُسهل كتابة التعليمات البرمجية التي تُنفذ مهام محددة داخل قاعدة البيانات بشكل مركزي وآمن. تتجاوز فائدتها مجرد تنفيذ تعليمات SQL، حيث توفر أداءً محسناً، إدارة أفضل للكود، وأماناً إضافياً للتطبيقات. في هذا المقال التقني الموسع، سنتناول كل ما يتعلق بالإجراءات المخزنة، من تعريفها واستخداماتها إلى تقنياتها المتقدمة، مع أمثلة عملية وتوضيحات مفصلة.


تعريف الإجراءات المخزنة (Stored Procedures)

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

الخصائص الرئيسية للإجراءات المخزنة:

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

فوائد استخدام الإجراءات المخزنة

  1. تحسين الأداء:
    • يتم تحليل وتجميع (compile) الإجراءات المخزنة مرة واحدة عند إنشائها، مما يجعلها أسرع عند التنفيذ.
    • تقليل حمل الشبكة (Network Traffic) حيث يتم تنفيذ الكود على الخادم بدلاً من نقل البيانات ذهابًا وإيابًا بين العميل والخادم.
  2. إدارة الكود بسهولة:
    • تحسين صيانة الكود من خلال تخزين جميع العمليات المنطقية في قاعدة البيانات.
    • إمكانية تحديث الإجراء المخزن دون الحاجة إلى تعديل الكود في التطبيقات المتصلة.
  3. تعزيز الأمان:
    • يمكن منح أذونات الوصول للإجراء المخزن فقط بدلاً من الجداول، مما يحمي البيانات الحساسة.
    • الحد من استخدام استعلامات SQL الديناميكية لتقليل مخاطر هجمات حقن SQL (SQL Injection).
  4. التنظيم وإعادة الاستخدام:
    • تقليل التكرار في كتابة الكود.
    • تسهيل التعاون بين فرق التطوير.

إنشاء الإجراء المخزن: بناء الجملة (Syntax)

يختلف بناء الجملة قليلاً بين أنظمة قواعد البيانات المختلفة مثل MySQL، SQL Server، PostgreSQL، وOracle. وفيما يلي أمثلة لكل نظام:

مثال في MySQL:

DELIMITER $$

CREATE PROCEDURE GetCustomerDetails(IN customerID INT)
BEGIN
    SELECT * FROM Customers WHERE ID = customerID;
END$$

DELIMITER ;

مثال في SQL Server:

CREATE PROCEDURE GetCustomerDetails
    @CustomerID INT
AS
BEGIN
    SELECT * FROM Customers WHERE ID = @CustomerID;
END

مثال في PostgreSQL:

CREATE OR REPLACE PROCEDURE GetCustomerDetails(customerID INT)
LANGUAGE plpgsql
AS $$
BEGIN
    SELECT * FROM Customers WHERE ID = customerID;
END;
$$;

مثال في Oracle:

CREATE OR REPLACE PROCEDURE GetCustomerDetails(customerID IN NUMBER)
IS
BEGIN
    SELECT * FROM Customers WHERE ID = customerID;
END;

مكونات الإجراء المخزن

1. المعاملات (Parameters):

  • IN: لتمرير القيم إلى الإجراء.
  • OUT: لإرجاع القيم من الإجراء.
  • INOUT: يسمح بتمرير وإرجاع القيم.

مثال:

CREATE PROCEDURE AddNumbers(IN num1 INT, IN num2 INT, OUT result INT)
BEGIN
    SET result = num1 + num2;
END;

2. كتلة التعليمات (Body):

  • تحتوي على التعليمات البرمجية (SQL Statements) لتنفيذ المهام.
  • يمكن أن تتضمن تعليقات، حلقات (Loops)، شروط (Conditions)، واستعلامات.

3. إرجاع القيم (Return Values):

  • يتم استخدام RETURN لإرجاع القيم في بعض الأنظمة.

استدعاء الإجراءات المخزنة

يتم استدعاء الإجراء المخزن باستخدام عبارة CALL في MySQL وPostgreSQL أو EXEC في SQL Server.

مثال في MySQL:

CALL GetCustomerDetails(1);

مثال في SQL Server:

EXEC GetCustomerDetails @CustomerID = 1;

الحالات العملية للإجراءات المخزنة

1. تحديث البيانات:

CREATE PROCEDURE UpdateCustomerName(IN customerID INT, IN newName VARCHAR(100))
BEGIN
    UPDATE Customers
    SET Name = newName
    WHERE ID = customerID;
END;

2. حذف البيانات:

CREATE PROCEDURE DeleteOldOrders(IN cutoffDate DATE)
BEGIN
    DELETE FROM Orders WHERE OrderDate < cutoffDate;
END;

3. إنشاء تقارير:

CREATE PROCEDURE SalesReport(IN startDate DATE, IN endDate DATE)
BEGIN
    SELECT ProductID, SUM(Quantity) AS TotalQuantity
    FROM Sales
    WHERE SaleDate BETWEEN startDate AND endDate
    GROUP BY ProductID;
END;

التقنيات المتقدمة في الإجراءات المخزنة

1. استخدام الحلقات (Loops):

  • تُستخدم لتنفيذ مهام متكررة.
  • مثال:
CREATE PROCEDURE PrintNumbers()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i <= 10 DO
        SELECT i;
        SET i = i + 1;
    END WHILE;
END;

2. معالجة الأخطاء (Error Handling):

  • استخدام عبارات DECLARE وHANDLER لمعالجة الأخطاء.
  • مثال:
CREATE PROCEDURE SafeDivision(IN num1 INT, IN num2 INT, OUT result FLOAT)
BEGIN
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    SET result = NULL;

    IF num2 = 0 THEN
        SET result = NULL;
    ELSE
        SET result = num1 / num2;
    END IF;
END;

3. دمج الإجراءات المخزنة مع المشغلات (Triggers):

  • يمكن استدعاء الإجراءات المخزنة داخل المشغلات لتنفيذ عمليات تلقائية.

قيود الإجراءات المخزنة

  • لا يمكنها الوصول إلى الموارد الخارجية مثل الملفات.
  • قد تسبب عبئاً على الخادم إذا لم تُكتب بطريقة فعالة.
  • صعوبة تصحيح الأخطاء (Debugging) مقارنة بالتطبيقات الأخرى.

مقارنة بين الإجراءات المخزنة والاستعلامات العادية

المعيار الإجراءات المخزنة الاستعلامات العادية
الأداء أسرع بسبب التجميع المسبق أبطأ نسبياً بسبب التحليل في كل مرة
الأمان أكثر أماناً أقل أماناً
إعادة الاستخدام قابلة لإعادة الاستخدام بسهولة تتطلب كتابة الكود مرة أخرى
التعقيد مناسبة للمهام المعقدة مناسبة للمهام البسيطة

نصائح لتحسين الأداء

  1. تجنب كتابة تعليمات غير ضرورية داخل الإجراءات.
  2. استخدام الفهارس (Indexes) لتحسين استعلامات البيانات.
  3. تقليل استخدام الحلقات داخل الإجراءات.
  4. تقسيم المهام الكبيرة إلى إجراءات مخزنة صغيرة.

 

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

الاجراءات المخزنة في sql او مايسمى ب store procedure مهمة جدآ في عالم برمجة قواعد البيانات كما انها سهلة الانشاء وسهلة البناء
#التعريف : هي عبارة عن اجراء معين تقوم بممهمة معينة او هي عبارة عن مجموعة من الاوامر تقوم بمهمة معينة مثل حساب نسبة ضريبة المبيعات – الارباح الشهرية – مستحقات موظف وهكذا
يستطيع المبرمج الاستغناء عن الاجراءات المخزنة وينفذ المطلوب بدون استخدام الاجراءات المخزنة لكن المبرمج الاكثر احترافآ هو الذي يحسب للوقت الف حساب فيتجنب اهدار المزيد من الوقت والجهد بالقيام ببناء اجراء مخزن لتنفيذ عملية معينة يستدعيها متى شاء ليوفر على نفسه الجهد لكتابة الاوامر من جديد

A Basic Guide to SQL Server Stored Procedures
ربما احتاج الى حساب نسبة الضريبة اكثر من مرة في البرنامج واستطيع تكرار الكود هذا الامر يبدو مجهدآ بالفعل سوف اتجنب هذا الاجهاد ببناء اجراء يقوم بحساب نسبة الضريبة مرة واحدة واستدعيه اكثر من مرة واجنب نفسي اهدار جهدي واهدار مساحة في الذاكرة العشوائية فانت كلما اجهدت نفسك بتكرار الكود يعتبر هذا اجهاد ايضآ للكمبيوتر لذلك تم اختراع مايسمى بالاجراءات والدوال
نفس الحال هو في sql يمكنك بناء اجراء وتخزنه في sql وتستدعيه وقتما شئت …
#بنيةالاجراءالمخزن : سنتعرف الان على كيفية بناء الاجراء المخزن
تاتي بنية الاجراء المخزن بالشكل التالي :

Create procedure <procedure_Name>
As
Begin
<SQL Statement>
End Go

في البداية نكتب Create procedure وهذا لاعطاء امر ل sql لانشاء اجراء مخزن يلي ذلك <procedure_Name> وهو اسم الاجراء
في السطر التالي ستجد الامر AS وهو يرمز الى بداية الاجراء
يلي ذلك التعبير <SQL Statement> وهو امر ال select الذي سيتم بناءه داخل الاجراء وهذا يسمى جسم البرنامج
اما Begin و End Go فهي بداية الاجراء ونهايته

#مثال
لنفترض ان لدينا جدول الموظفين EmP ويحتوي على التالي
رقم الموظف – اسم الموظف – االراتب – البدلات :

Emp table
Emp_no : emp_name : salary : Allowances
E1 : khaled : 1000 : 150
E2 : omer : 1200 : 170

لنفترض اننا نريد انشاء اجراء مخزن اسمه total يقوم بحساب الاجمالي
الراتب + البدلات (salary+Allowances) لجميع الموظفين هنا سيكون شكل الاجراء كالتالي :

CREATE PROCEDURE total
AS
SELECT [salary+Allowances] FROM Emp
GO

بعد كتابة الكود اللازم للاجراء وتنفيذه تستطيع استدعائه وقتما شئت بالامر التالي

EXEC total ;

اي قم بتنفيذ واستدعاء الاجراء total
سيكون هناك دروس اخرى وتطبيقات في الاجراءات المخزنة store procedure

الخاتمة

الإجراءات المخزنة في SQL تُعد أداة قوية لتطوير تطبيقات قواعد البيانات الحديثة. من خلال الاستفادة منها، يمكن تحسين الأداء، تبسيط إدارة الكود، وتعزيز أمان التطبيقات. يُنصح المطورون والمبرمجون باستخدامها بفعالية لتحقيق أقصى استفادة منها.

اترك تعليقاً

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