الإجراء المخزن في SAP HANA (برنامج تعليمي حول SQL)

⚡ ملخص ذكي

SAP الإجراء المخزن في HANA SQL هو كتلة SQLScript قابلة لإعادة الاستخدام ومسماة، تُنفذ عملية بيانات محددة. يقبل هذا الإجراء معلمات IN وOUT وINOUT، ويمكن جعله للقراءة فقط باستخدام READS SQL DATA، ويتم إنشاؤه على مستوى المخطط أو الحزمة باستخدام صيغة CREATE PROCEDURE.

  • 🧱 اختر المكان الذي تريد إنشاءه فيه: حدد الإجراءات على مستوى المخطط (الكتالوج) أو مستوى الحزمة (المحتوى) حسب مكان وجودها في SAP نموذج بيانات HANA.
  • 📥 استخدم المعلمات عن قصد: يقوم المدخل IN بتمرير المدخلات، ويعيد المخرج OUT المخرجات، ويقوم المدخل INOUT بكليهما - قم بتسميتهما من أجل الوضوح في كل توقيع.
  • 🔐 اختر أمان SQL بعناية: يعمل المُعرّف بصلاحيات المُنشئ؛ ويعمل المُستدعي بصلاحيات المُستدعي - يتم الاختيار بناءً على سياسة الوصول إلى البيانات.
  • 📚 ضع علامة "للقراءة فقط" كلما أمكن ذلك: يقوم الأمر READS SQL DATA بتوثيق الغرض، وتحسين التخطيط، والسماح بعرض الإجراء من خلال عرض النتائج.
  • 🤖 استخدام الذكاء الاصطناعي لصياغة الإجراءات: تقوم المساعدات المدعومة بالذكاء الاصطناعي بتحويل منطق اللغة الإنجليزية البسيطة إلى قوالب CREATE PROCEDURE مع المعلمات ومعالجات الاستثناءات وعرض النتائج.

SAP إجراء مخزن في لغة SQL في HANA

ما هو الإجراء المخزن في لغة SQL؟

A الإجراء المخزن هي وحدة برمجية مُسماة وقابلة لإعادة الاستخدام، تُنفذ مهمة محددة. ويمكن تجميع الإجراءات في برامج أكبر، وهو أساس... تصميم وحداتيمكن لإجراء واحد استدعاء إجراء آخر - ويُشار إلى المُستدعي باسم برنامج الاتصال.

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

An SQL الإجراء في SAP HANA يمكن إنشاؤها في:

  • مستوى المخطط (عقدة الكتالوج) - تتم إدارتها من خلال الكتالوج وتكون مرئية لكل مستهلك لديه الامتيازات المناسبة.
  • مستوى الحزمة (عقدة المحتوى) - تتم إدارتها كعنصر تصميم في وقت التصميم داخل حزمة التطبيق.

SAP صيغة الإجراءات المخزنة في HANA

الصيغة العامة لإنشاء إجراء في SAP يظهر HANA أدناه.

CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>]
    [SQL SECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
    [READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
    { BEGIN [SEQUENTIAL EXECUTION]
        <procedure_body>
      END
    | HEADER ONLY }

استخدم CREATE PROCEDURE تُنشئ هذه العبارة إجراءً باستخدام لغة البرمجة المحددة بواسطة <lang>اللغة الافتراضية هي SQLScript.

شرح عناصر بناء الجملة

يصف الجدول أدناه كل بند مستخدم في صيغة CREATE PROCEDURE.

العنصر الوصف
<proc_name> اسم الإجراء.
<parameter_clause> قائمة بالمعلمات، كل منها مُعلّم بـ IN أو OUT أو INOUT:
• IN — تم تمرير مدخلات للقراءة فقط إلى الإجراء.
• OUT — المخرجات التي تم إرجاعها من الإجراء.
• داخل وخارج — كلاهما يمرر قيمة ويعيد القيمة المعدلة.
LANGUAGE <lang> لغة البرمجة المستخدمة في الإجراء. القيمة الافتراضية: SQLSCRIPT.
SQL SECURITY <mode> وضع الأمان (الافتراضي: المُعرِّف):
• محدد — يعمل بصلاحيات منشئ الإجراء.
• المحرر — يعمل بصلاحيات المتصل.
DEFAULT SCHEMA <default_schema_name> يُستخدم المخطط لحلّ الكائنات غير المؤهلة في نص الإجراء. في حال حذفه، يُستخدم مخطط الجلسة الحالي.
READS SQL DATA يُحدد هذا الإجراء على أنه للقراءة فقط. لا يمكنه تعديل البيانات أو المخطط، ولا يحتوي على أي لغة تعريف البيانات (DDL) أو لغة معالجة البيانات (DML)، ويمكنه فقط استدعاء إجراءات أخرى للقراءة فقط.
WITH RESULT VIEW <view_name> يُحدد هذا الخيار طريقة عرض النتائج المستخدمة كمخرجات للإجراء. وعند وجود طريقة عرض النتائج، يمكن الاستعلام عن الإجراء بواسطة إجراء آخر. SQL بيان كما لو كان جدولاً أو عرضاً.
SEQUENTIAL EXECUTION يجبر هذا الإجراء على التنفيذ بشكل تسلسلي دون أي توازي.
<procedure_body> الجزء الرئيسي من الإجراء، مكتوب بلغة البرمجة المختارة.
HEADER ONLY يُنشئ هذا الأمر خصائص الإجراء فقط باستخدام مُعرّف الكائن (OID)، دون تجميع نص الإجراء. وهو مفيد للتصريحات المسبقة.

مثال: إنشاء إجراء مخزن بسيط

يُنشئ المثال أدناه إجراءً للقراءة فقط يقوم بإرجاع إجمالي المبيعات لعميل معين.

CREATE PROCEDURE GET_CUSTOMER_SALES (
    IN  iv_customer_id NVARCHAR(10),
    OUT ev_total       DECIMAL(15,2)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
    SELECT SUM(NET_VALUE) INTO ev_total
    FROM   "SALES"."ORDERS"
    WHERE  CUSTOMER_ID = :iv_customer_id;
END;

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

CALL GET_CUSTOMER_SALES ('C0001', ?);

SAP يقوم برنامج HANA Studio (أو أي عميل JDBC/ODBC) بإرجاع قيمة ev_total في معلمات الإخراج.

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

بمجرد إنشاء الإجراء المخزن، يتم استدعاؤه من خلال CALL يمكن استخدام هذا البيان، اختيارياً، داخل إجراء آخر، أو دالة SQLScript، أو عميل خارجي. أنماط الاستدعاء الأربعة الأكثر شيوعاً هي:

  • من لغة SQL: CALL my_proc(p1, p2, ?); — تُرجع العناصر النائبة قيم الإخراج.
  • من إجراء آخر: CALL another_proc(:in1, :out1);
  • من أحد التطبيقات: ربط معلمات الإدخال وقراءة المخرجات من خلال JDBC أو ODBC أو Cloud SDK.
  • كطاولة افتراضية: عند تعريف عرض النتائج، قم بالاستعلام عن الإجراء باستخدام عبارة SELECT مقابل اسم العرض.

أفضل الممارسات لإجراءات HANA المخزنة

تساعد العادات التالية في الحفاظ على سهولة قراءة إجراءات HANA، وكفاءتها، وسهولة صيانتها:

  • تسمية المعلمات باستخدام البادئات: iv_ لإدخال البيانات، ev_ للتصدير، و iov_ للإدخال/الإخراج.
  • حدد الغرض باستخدام READS SQL DATA حيثما يكون الإجراء للقراءة فقط.
  • استخدم مُستدعي أمان SQL بالنسبة للإجراءات المشتركة التي ينبغي أن تحترم امتيازات المتصل.
  • قم بتغليف كل كتلة بـ BEGIN/END واحرص على أن يكون جسم البرنامج قصيرًا - قسّم المنطق المعقد إلى إجراءات مساعدة.
  • معالجة الاستثناءات: تستخدم DECLARE EXIT HANDLER من أجل الإبلاغ عن الأخطاء بسلاسة.
  • تجنب استخدام SELECT * داخل الإجراءات — قم بتسمية الأعمدة التي تحتاجها بالفعل حتى تظل الخطط مستقرة.

الأسئلة الشائعة

يمكن أن يحتوي الإجراء على عدة معلمات إخراج، ويمكنه إصدار أوامر DML، ويتم استدعاؤه باستخدام الأمر CALL. أما الدالة، فترجع قيمة عددية أو قيمة جدولية واحدة، وتعمل دون آثار جانبية، وتُستخدم داخل عبارات SELECT أو WHERE أو غيرها من التعبيرات.

اللغة الافتراضية والأكثر شيوعًا هي SQLScript. يدعم نظام HANA أيضًا لغة R للإجراءات التي تتطلب مكتبات إحصائية، ولغة L لكتابة البرامج النصية منخفضة المستوى. تُعد SQLScript الخيار الأمثل لمعظم إجراءات الأعمال.

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

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

استخدم عبارة CALL: CALL proc_name (in_val, out_param);. من خلال تطبيق، قم بربط المدخلات والمخرجات من خلال برنامج تشغيل JDBC أو ODBC أو Cloud SDK، أو قم بعرض الإجراء من خلال OData لعملاء REST.

حذف إجراء مع DROP PROCEDURE proc_name; وأعد إنشائه باستخدام إجراء الإنشاء أو الاستبدال. SAP لا يدعم HANA الأمر ALTER PROCEDURE؛ النمط القياسي هو CREATE OR REPLACE.

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

نعم. تقوم أدوات الذكاء الاصطناعي بشرح SQLScript سطرًا بسطر - موضحة ما يفعله كل معلم، ولماذا تم اختيار عملية ربط معينة، وأين قد يفشل الإجراء مع المدخلات السيئة - مما يجعل مراجعة التعليمات البرمجية والتأهيل أسرع بكثير.

تلخيص هذه التدوينة بـ: