إجراء مخزن

الإجراء المخزن (ويُسمى أيضاً prc أو proc أو storp أو sproc أو StoPro أو StoredProc أو StoreProc أو sp أو SP ) هو روتين فرعي متاح للتطبيقات التي تصل إلى نظام إدارة قواعد البيانات العلائقية (RDBMS). تُخزن هذه الإجراءات في قاموس بيانات قاعدة البيانات .

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

قد تُعيد الإجراءات المخزنة مجموعات نتائج ، أي نتائج SELECTعبارة ما. يمكن معالجة مجموعات النتائج هذه باستخدام المؤشرات ، أو بواسطة إجراءات مخزنة أخرى، أو بربط مُحدد موقع مجموعة النتائج، أو بواسطة التطبيقات. قد تحتوي الإجراءات المخزنة أيضًا على متغيرات مُعلنة لمعالجة البيانات ومؤشرات تسمح لها بالتكرار عبر صفوف متعددة في جدول. تتضمن عبارات التحكم في تدفق الإجراءات المخزنة عادةً عبارات مثل IF`require` WHILEو` LOOPrequire` و` REPEATrequire` و`require` CASEو`require` وغيرها. يمكن للإجراءات المخزنة استقبال متغيرات، أو إرجاع نتائج، أو تعديل متغيرات وإرجاعها، وذلك حسب كيفية ومكان تعريف المتغير.

تطبيق

تتشابه الإجراءات المخزنة مع الدوال المعرفة من قبل المستخدم (UDFs). ويكمن الاختلاف الرئيسي في أن الدوال المعرفة من قبل المستخدم يمكن استخدامها كأي تعبير آخر ضمن عبارات SQL، بينما يجب استدعاء الإجراءات المخزنة باستخدام CALLعبارة SQL. [ 1 ]

استدعاء الإجراء (...)

أو

نفّذ الإجراء (...)

تختلف طريقة تنفيذ الإجراءات المخزنة بدقة من نظام قاعدة بيانات لآخر. وتدعمها معظم شركات قواعد البيانات الكبرى بشكل أو بآخر. وبحسب نظام قاعدة البيانات، يمكن تنفيذ الإجراءات المخزنة بلغات برمجة متنوعة ، مثل SQL و Java و C و C++ . وقد تقوم الإجراءات المخزنة المكتوبة بلغات غير SQL بتنفيذ عبارات SQL بنفسها، أو قد لا تقوم بذلك.

أدى التوسع في استخدام الإجراءات المخزنة إلى إدخال عناصر إجرائية إلى لغة SQL في معياري SQL:1999 و SQL:2003 ضمن الجزء SQL/PSM . وبذلك أصبحت SQL لغة برمجة إجرائية . توفر معظم أنظمة قواعد البيانات امتدادات خاصة بها ومخصصة لموردين محددين، تتجاوز SQL/PSM. كما يوجد معيار قياسي للإجراءات المخزنة في Java، بالإضافة إلى SQL/JRT .

نظام قاعدة البياناتلغة التنفيذ
مكعبجافا
قاعدة بيانات IBM Db2لغة SQL PL (قريبة من معيار SQL/PSM ) أو Java
طائر النارPSQL (يدعم Fyracle أيضًا أجزاءً من PL/SQL الخاصة بـ Oracle)
إنفورميكسجافا
إنتربيسلغة الإجراءات المخزنة ولغة التشغيل
خادم مايكروسوفت SQLلغة Transact-SQL ولغات إطار عمل .NET المختلفة
MySQL ، MariaDBإجراءات مخزنة خاصة، مع الالتزام التام بمعيار SQL /PSM
NuoDBSQL أو Java
أوبن لينك فيرتوسوإجراءات لغة SQL الاحترافية (VSP)؛ [ 2 ] قابلة للتوسيع أيضًا عبر Java وC ولغات برمجة أخرى
أوراكلPL/SQL أو Java
PostgreSQLيمكن لـ PL/pgSQL أيضًا استخدام لغات وظائف خاصة بها مثل PL/Tcl أو PL/Perl أو PL/Python [ 3 ]
ساب هاناSQLScript أو R
SAP ASEترانزاكت-إس كيو إل
SAP SQL Anywhere(T-SQL ، Watcom SQL ، Java ، أو C / C++ )
SQLiteغير مدعوم

مقارنة مع لغة SQL الثابتة

التكاليف العامة
نظرًا لأن عبارات الإجراءات المخزنة تُخزَّن مباشرةً في قاعدة البيانات، فقد تُزيل جزءًا من عبء التجميع أو كله، وهو عبءٌ ضروريٌّ عادةً عند إرسال تطبيقات البرامج استعلامات SQL مضمنة (ديناميكية) إلى قاعدة البيانات. (مع ذلك، تُطبِّق معظم أنظمة قواعد البيانات ذاكرة تخزين مؤقتة للعبارات وأساليب أخرى لتجنُّب التجميع المتكرر لعبارات SQL الديناميكية). كما أن هذه العبارات، رغم أنها تُجنِّب بعض استعلامات SQL المُجمَّعة مسبقًا، تُزيد من تعقيد إنشاء خطة تنفيذ مثالية، لأن بعض وسائط عبارة SQL لا تُقدَّم في وقت التجميع. وبناءً على تطبيق قاعدة البيانات وتكوينها، ستُلاحظ نتائج أداء متباينة بين الإجراءات المخزنة والاستعلامات العامة أو الدوال المُعرَّفة من قِبل المستخدم.
تجنب حركة مرور الشبكة
تتمثل إحدى المزايا الرئيسية للإجراءات المخزنة في إمكانية تشغيلها مباشرةً داخل محرك قاعدة البيانات . في نظام الإنتاج، يعني هذا عادةً أن الإجراءات تُنفذ بالكامل على خادم قاعدة بيانات متخصص يتمتع بوصول مباشر إلى البيانات. وتكمن الفائدة في توفير تكاليف الشبكة، وهو أمر بالغ الأهمية عند استخدام سلسلة من عبارات SQL.
Encapsulating business logic
Stored procedures allow programmers to embed business logic as an API in the database, which can simplify data management and reduce the need to encode the logic elsewhere in client programs. This can result in a lesser likelihood of data corruption by faulty client programs. The database system can ensure data integrity and consistency with the help of stored procedures.
Delegating access-rights
In many systems, stored procedures can be granted access rights to the database that users who execute those procedures do not directly have.
Some protection from SQL injection attacks
Stored procedures can be used to protect against injection attacks. Stored procedure parameters will be treated as data even if an attacker inserts SQL commands. Also, some DBMS will check the parameter's type. However, a stored procedure that in turn generates dynamic SQL using the input is still vulnerable to SQL injections unless proper precautions are taken.

Other uses

In some systems, stored procedures can be used to control transaction management; in others, stored procedures run inside a transaction such that transactions are effectively transparent to them. Stored procedures can also be invoked from a database trigger or a condition handler. For example, a stored procedure may be triggered by an insert on a specific table, or update of a specific field in a table, and the code inside the stored procedure would be executed. Writing stored procedures as condition handlers also allows database administrators to track errors in the system with greater detail by using stored procedures to catch the errors and record some audit information in the database or an external resource like a file.

Comparison with functions

  • A function is a subprogram written to perform certain computations.
  • A scalar function returns only one value (or NULL), whereas a table function returns a (relational) table comprising zero or more rows, each row with one or more columns.
  • Functions must return a value (using the RETURN keyword), but for stored procedures this is not mandatory.
  • Stored procedures can use RETURN keyword but with no value being passed.
  • Functions could be used in SELECT statements, provided they do no data manipulation. However, procedures cannot be included in SELECT statements.
  • A stored procedure can return multiple values using the OUT parameter, or return no value.
  • A stored procedure saves the query compiling time.
  • A stored procedure is a database object.
  • A stored procedure is a material object.

Comparison with prepared statements

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

مقارنة بالعقود الذكية

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

العيوب

  • غالبًا ما تكون لغات الإجراءات المخزنة خاصة بمورد معين. ويتطلب تغيير موردي قواعد البيانات عادةً إعادة كتابة الإجراءات المخزنة الموجودة.
  • يصعب تتبع التغييرات التي تطرأ على الإجراءات المخزنة ضمن نظام التحكم في الإصدارات مقارنةً بباقي أجزاء الكود. إذ يجب إعادة إنتاج هذه التغييرات كملفات نصية تُخزّن في سجل المشروع ليتم تضمينها، وقد يصعب دمج الاختلافات في الإجراءات وتتبعها بدقة.
  • لا يمكن اكتشاف الأخطاء في الإجراءات المخزنة كجزء من خطوة التجميع أو البناء في بيئة تطوير التطبيقات - وينطبق الشيء نفسه إذا فُقد إجراء مخزن أو تم حذفه عن طريق الخطأ.
  • تختلف لغات الإجراءات المخزنة من موردين مختلفين في مستويات تعقيدها.
  • غالباً ما يكون دعم الأدوات لكتابة وتصحيح الإجراءات المخزنة أقل جودة من لغات البرمجة الأخرى، ولكن هذا يختلف بين البائعين واللغات.
    • على سبيل المثال، يمتلك كل من PL/SQL وT-SQL بيئات تطوير متكاملة (IDEs) وأدوات تصحيح أخطاء مخصصة. ويمكن تصحيح أخطاء PL/PgSQL من خلال بيئات تطوير متكاملة مختلفة.

مراجع

  1. "Db2 12 - برمجة التطبيقات وSQL - استدعاء إجراء مخزن من تطبيقك" . www.ibm.com . تاريخ الاسترجاع: 26-05-2022 .
  2. "الفصل 11. دليل لغة الإجراءات SQL" . وثائق OpenLink . تم الاطلاع عليه بتاريخ 11 سبتمبر 2019 .
  3. "الفصل 42. اللغات الإجرائية" . وثائق PostgreSQL . 9 نوفمبر 2023. تم الاطلاع عليه في 20 نوفمبر 2023 .