الإجراءات المخزنة (Stored Procedures) في لغة SQL هي مجموعة من أوامر SQL المُخزّنة في قاعدة البيانات. تُعتبر الإجراءات المخزنة بمثابة "برامج صغيرة" داخل قاعدة البيانات، حيث يُمكن استدعاؤها وتنفيذها بشكل مُتكرر. تُساعد الإجراءات المخزنة على تحسين الأداء، وزيادة الأمان، وتسهيل إدارة قواعد البيانات.

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

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

بنية الإجراء المُخزّن:

تختلف بنية إنشاء الإجراء المُخزّن قليلًا بين أنظمة إدارة قواعد البيانات المختلفة (مثل MySQL، SQL Server، Oracle). بشكل عام، تتكون البنية من:

  • CREATE PROCEDURE procedure_name: لإنشاء الإجراء المُخزّن وتحديد اسمه.
  • (parameters): تحديد المُعاملات (parameters) التي يُمكن تمريرها للإجراء (اختياري).
  • AS: بداية تعريف الكود الخاص بالإجراء.
  • BEGIN: بداية كتلة الكود.
  • SQL statements: أوامر SQL التي سيتم تنفيذها داخل الإجراء.
  • END: نهاية كتلة الكود.

مثال (SQL Server):

SQL
CREATE PROCEDURE GetCustomersByCity (@City nvarchar(30))
AS
BEGIN
SELECT *
FROM Customers
WHERE City = @City
END;

في هذا المثال:

  • اسم الإجراء المُخزّن هو GetCustomersByCity.
  • يأخذ مُعامل واحد هو @City من نوع nvarchar(30).
  • يقوم الإجراء باستعلام عن جدول Customers لجلب العملاء الذين يعيشون في المدينة المُحددة.

تنفيذ الإجراء المُخزّن (SQL Server):

SQL
EXEC GetCustomersByCity 'London';

سيقوم هذا الأمر بتنفيذ الإجراء المُخزّن وتمرير قيمة 'London' للمُعامل @City.

أنواع المُعاملات:

يُمكن أن تكون المُعاملات في الإجراءات المُخزّنة من ثلاثة أنواع:

  • IN: مُعامل إدخال، يتم تمرير قيمة له عند استدعاء الإجراء.
  • OUT: مُعامل إخراج، يُستخدم لإرجاع قيمة من الإجراء.
  • INOUT: مُعامل إدخال وإخراج، يتم تمرير قيمة له ويُمكن تعديلها داخل الإجراء وإرجاعها.

مثال على مُعامل الإخراج (SQL Server):

SQL
CREATE PROCEDURE GetCustomerCount (@City nvarchar(30), @Count int OUTPUT)
AS
BEGIN
SELECT @Count = COUNT(*)
FROM Customers
WHERE City = @City
END;

-- تعريف متغير لتخزين قيمة الإخراج
DECLARE @CustomerCount int;

-- تنفيذ الإجراء المُخزّن وتمرير المتغير كمُعامل إخراج
EXEC GetCustomerCount 'London', @CustomerCount OUTPUT;

-- عرض قيمة الإخراج
SELECT @CustomerCount;

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

  • تنفيذ عمليات مُعقدة تتطلب أكثر من استعلام SQL.
  • التحقق من صحة البيانات قبل إدخالها في قاعدة البيانات.
  • أتمتة المهام المُتكررة.
  • إنشاء تقارير مُخصصة.

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