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

ما هو الإجراء المخزن في لغة 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 * داخل الإجراءات — قم بتسمية الأعمدة التي تحتاجها بالفعل حتى تظل الخطط مستقرة.
