إجراء Vіdminnіst vіd vіd ، scho zberіgaєtsya. إسقاط عرض الاقتراح. يجب تجنب عدم التسامح مع الوظائف

يتم حفظ الإجراءإجراء مخزن) - تسمية كائن برنامج قاعدة البيانات. يحتوي SQL Server على أنواع ملصقات الإجراءات التي يتم حفظها.

إجراءات النظام التي تم حفظهاإجراء تخزين النظام) بواسطة تجار التجزئة لنظام إدارة قواعد البيانات (DBMS) ويتم تجميعها للعرض من كتالوج النظام أو من معلومات النظام. تبدأ أسمائهم بالبادئة "sp_". يتم تشغيل الإجراءات من جميع الأنواع التي تم حفظها ، وذلك بمساعدة الأمر EXECUTE ، بحيث يمكنك اختصارها إلى EXEC. على سبيل المثال ، إجراء sp_helplogins ، الذي يتم تشغيله بدون معلمات ، يشكل مكالمتين حول أسماء إدخالات السحابة (إنجل.تسجيلات الدخول) (إنجل.المستخدمين).

EXEC sp_helplogins ؛

Shchob حتى الآن الإشعار حول diy ، scho vykonuyutsya لإجراءات النظام الإضافية المحفوظة ، في الجدول. 10.6 وضع deyaki بعقب. هناك أكثر من ألف إجراء نظام مخزّن في SQL Server.

الجدول 10.6

تطبيق إجراءات نظام خادم SQL

يتوفر إنشاء Koristuvachevi لإجراءات الحفظ لـ coristuvac DBs و DBs لكائنات timchasovye. في بقية اليوم ، سيكون الإجراء الذي سيتم اتخاذه تيمشاسوفا.لذلك ، تمامًا كما هو الحال في vipadku مع جداول timchasov ، تسمية إجراء timchasov ، الذي تم حفظه ، يكون الشخص مذنبًا بالبدء بالبادئة "#" ، حيث يتم حفظ إجراء timchasov المحلي بالكامل ، ولكن مع "##" - إنه كذلك عالمي. لا يمكن تنفيذ إجراء التوقيت المحلي إلا في إطار اليوم الذي تم إنشاؤه فيه ، فهو عالمي - وفي مجالات أخرى.

يمكن أن تعمل كائنات برمجة SQL Server من أجل مساعدة Transact-SQL وللمساعدة في التحديدات (إنجل.التجمع) في بيئة CRL (وقت تشغيل اللغة العامة) في Microsoft.Net Framework. إنها الطريقة الأولى فقط للنظر إلى هذا المساعد.

لإنشاء الإجراءات التي تم حفظها ، يتم استخدام بيان "إنشاء الإجراء" (يمكنك اختصاره إلى PROC) ، تنسيق الإرشادات أدناه:

إنشاء (PROC I PROCEDURE) proc_name [؛ رقم]

[(gparameter data_type)

["افتراضي] |

[مع [ ،...ن ] ]

[للنسخ]

AS ([BEGIN] sql_statement [؛] [... ن] [النهاية])

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

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

EXECUTE AS يعيّن سياق الأمان ، الذي قد يكون له إجراء. اكتب إحدى القيم f CALLER | ذاتي | المالك | "اسم االمستخدم"). CALLER هي القيمة الكامنة وراء الترقية وتعني أنه سيتم تحديد الرمز في سياق رمز الأمان الذي يستدعي الوحدة. من الواضح أن الأم مذنبة بارتكاب coristuvach ، ليس فقط في كائن البرمجة نفسه ، ولكن أيضًا على كائنات قاعدة البيانات الأخرى ، التي يتم القبض عليهم فيها. يعني EXECUTE AS SELF اعتمادًا على سياق السماعة ، مما يؤدي إلى إنشاء كائن البرمجة أو تغييره. يحدد OWNER أنه سيتم التفاف الكود في سياق مدير مؤشر ترابط الإجراء. إذا لم يتم تعيين vlasnik لها ، فإنها تقسم على vlasnik من المخطط ، للاستلقاء. EXECUTE AS "اسم المستخدم" يسمح لك بتحديد اسم koristuvach صراحة (في الكفوف المفردة).

يمكن تحديد المعلمات لهذا الإجراء. جميع التغييرات المحلية ، التي تم تغييرها لنقل القيم إلى الإجراء. بالإضافة إلى معلمة التعبير باستخدام الكلمة الأساسية OUTPUT (أو اختصارها إلى OUT) ، يمكنك أيضًا تعيينها على قيمة بعد انتهاء الإجراء ، يمكنك اختيار البرنامج الذي يسمى الإجراء. تعني الكلمة الأساسية READONLY أنه لا يمكن تغيير قيمة المعلمة في منتصف الإجراء الذي يتم حفظه.

يمكن تعيين قيمة للمعلمات للترقية ، والتي سيتم تغييرها ، بحيث لا يتم تحديد قيمة المعلمة بشكل صريح في الساعة التالية من الإجراء. لنلقِ نظرة على المثال:

إنشاء سورما العملية (a int ،b int = 0 ،

© النتيجة int الإخراج) AS

ضبط النتيجة @ = 0a + 0b

أنشأنا إجراءًا بثلاث معاملات ، علاوة على ذلك ، فإن المعلمةb لها قيمة القفل = 0 ، والمعاملresult خارج: يتم تدوير القيمة من خلال المعامل الجديد في البرنامج الذي يسمى. Diya ، ماذا تربح ، افعل ذلك بسهولة - تأخذ معلمة الإخراج قيمة مجموع مدخلين.

عند العمل في SQL Server Management Studio ، قمت بإنشاء إجراء محفوظ ، يمكنك العثور عليه في قسم برمجة قاعدة البيانات (إنجل.قابلية البرمجة) بين قوسين للإجراءات المحفوظة (الشكل 10.2).

عند النقر فوق الإجراء مثل معلمات الإدخال ، يمكنك تعديل كل من التغيير والثوابت. دعنا نلقي نظرة على مثالين. يتم تعيين معلمات الإدخال الأولى للإجراء بشكل صريح بواسطة الثوابت ، وتحتوي معلمة الإخراج الخاصة بـ wiki على الكلمة الأساسية OUTPUT. في خيار آخر ، كمعامل إدخال أول ، يتم تعيين قيمة التغيير ، وبالنسبة للمعامل الآخر ، بعد الكلمة الأساسية DEFAULT الإضافية ، يُشار إلى القيمة التي يمكن تغييرها للقفل:

أرز. 10.2.

إعلان @ 3 كثافة العمليات ؛

ملخص EXEC 10.5 ،OUTPUT ؛

PRINT0c ؛ - سيظهر 15

أعلن Gi int = 5 ؛

- أقل من ساعة قيمة viklik vikoristovuєmo لـ zamovchuvannyam

ملخص EXEC Gi ، افتراضي ، 0 s OUTPUT ؛

PRINT0c ؛ - سيظهر 5

الآن دعونا نلقي نظرة على المثال من خلال تحليل رمز الانعطاف ، الذي ينتهي به الإجراء. اسمحوا لي أن أبتهج ، يا سكيلكي على الطاولات ، كتاب من الكتب ، شوهد في نطاق معين من السنوات. إذا كان الأمر كذلك ، فقد ظهر cob rіk أكبر من kontsevy ، ويتم تشغيل الإجراء "1" ولا يتم تنفيذ pidrakunok ، وإلا - يتغير عدد الكتب أيضًا ويتحول إلى 0:

CREATE PROC dbo.rownum (0FirsYear int، GLastYear int، 0result int OUTPUT) AS

إذا 0 سنوات السنة> 0 العام الماضي العائد 1

ضبط النتيجة @ = (حدد العدد (*) من dbo.Bookl

ما بين 0 سنة و 0 سنة أخرى) ؛

دعونا نلقي نظرة على متغير من هذا الإجراء ، حيث يتم أخذ رمز الدوران في التغيير الكامل 0ret ، وبعد ذلك يتم تحليل قيمته (في هذه الحالة ستكون 1). تعمل وظيفة CAST ، المنتصرة في عامل التشغيل PRINT ، على تحويل قيمة متغير عدد صحيح Gres إلى نوع الصف:

إعلان 0ret int، Gres int

EXEC Gret = rownum 2004 ، 2002 ، Gres OUT ؛

إذا 0ret = l PRINT

اطبع "عدد الكتب" + CAST (Gres as varchar (20))

يمكن لإجراءات الحفظ قراءة البيانات من الجداول وتغيير البيانات وإنشاء الجداول وكائنات قاعدة البيانات الأخرى.

ومع ذلك ، لا يمكن إنشاء المخططات والوظائف والمشغلات والإجراءات والإجراء المحفوظ.

يوضح المؤخرة الهجومية القدرة والتغذية المرتبطة بمجال رؤية الأشياء الحراسة. الإجراء موضح أدناه ، والذي تم اتخاذه ، لإعادة التحقق من وجود الجدول الزمني # Tab2 ؛ إذا لم تكن هناك جداول ، فأنا أقوم بإنشائها. بعد الجدول # Tab2 ، يتم إدخال قيم عمودين ، وبدلاً من الجدول ، يتم عرضها بواسطة عبارة SELECT:

CREATE PROC My_Procl (id int،name varchar (30))

إذا كانت OBJECT_ID ("tempdb.dbo. # Tab21) فارغة

INSERT INTO dbo. # Tab2 (المعرف ، الاسم) القيم (0 معرف ، 0 اسم)

حدد * من dbo. # Tab2- # 1

قبل الأسبوع الأول من الإجراء ، الذي يتم إجراؤه ، سنضعه في الجدول الزمني التالي # Tab2. احترم عامل التشغيل ЄХES. بالنسبة للأعقاب الأمامية ، تم نقل المعلمات إلى الإجراء "حسب الموضع" ، وفي هذه الحالة ، يتم استخدام تنسيق مختلف لنقل المعلمات - يتم استخدام "حسب الاسم" ، ويشار صراحة إلى اسم المعلمة الخاصة بهذه القيمة:

إنشاء جدول dbo. # Tab2 (معرف int ، اسم varchar (30)) ؛

EXEC My_Procl 0name = "lvan" ، 0id = 2 ؛

حدد * من dbo. # tab2 ؛ - # 2

في المؤخرة التي تم تحريكها ، تغير عبارة SELECT الثنائيات: في المرة الأولى - منتصف الإجراء ، والثانية - من جزء الكود الذي يستدعي (تم تعيينه بواسطة التعليق "№ 2").

قبل ويكي آخر للإجراء ، رأينا الجدول الزمني # Tab2. ثم سيتم إنشاء جدول زمني واحد من الإجراء الذي تم اتخاذه:

إسقاط الجدول dbo. # tab2 ؛

EXEC My_Procl 0name = "Ivan" ، 0id = 2 ؛

حدد * من dbo. # tab2 ؛ - # 2

في هذه الحالة ، أعطيت فقط عبارة SELECT الموجودة في منتصف الإجراء (مع التعليق "Xa 1"). تم إحضار إدخال SELECT "No. 2" إلى العفو ، حيث تم إنشاؤه في الإجراء ، الذي تم حفظه ، سيتم بالفعل حذف الجدول الزمني في وقت التحول من الإجراء من قاعدة بيانات tempdb.

يمكن رؤية الإجراء بمساعدة عامل DROP PROCEDURE. يتم وضع مؤشر Yogo أدناه على تنسيق Yogo. باستخدام عامل واحد ، يمكنك رؤية بعض الإجراءات المحفوظة عن طريق إحياءها من خلال شخص ما:

DROP (PROC I PROCEDURE) (الإجراء) [

على سبيل المثال ، من الواضح أنني قمت في وقت سابق بإنشاء إجراء الملخص:

ملخص DROP PROC ؛

يمكنك إجراء تغييرات على الإجراء الرئيسي (وفي الواقع - إعادة التعيين її) باستخدام مساعدة عامل تغيير الإجراء (ملحق

سرعة البخار PROC). بصرف النظر عن الكلمة الرئيسية ALTER ، يختلف تنسيق البيان عمليًا عن تنسيق CREATE PROCEDURE. على سبيل المثال ، نقوم بتغيير الإجراء dbo. rownum ، تعيين خيار viscon في السياق الأمني ​​للرقيب:

ALTER PROC dbo.rownum (SFirs السنة int ،

SLastYear int ، Sresult int OUTPUT)

WITH EXECUTE AS Owner - خيار التثبيت

إذا كان 0 سنوات السنة> 0 العام الأخير ، العودة 1 ، تبدأ أخرى

حدد 0 نتيجة = (حدد العدد (*) من dbo.Bookl

أين بين السنة الصغيرة والعام الخاسر) ؛

في بعض الحالات ، قد تحتاج إلى إثبات الحاجة إلى أمر التشكيل الديناميكي و viconann على خادم قاعدة البيانات. يمكن أيضًا التحقق من Tse zavdannya لمساعدة المشغل ЄХES. في المؤخرة السفلية التي تم تحريكها ، يتم تحديد مجموعة من السجلات من جداول Bookl للمساواة الفكرية لسمة Year ، وهي القيمة التي تم تعيينها للتغيير:

إعلان 0 ص int = 2000 ؛

EXEC ("حدد * من dbo.Bookl أين =" [بريد إلكتروني محمي]) ;

تنشئ تعليمات Vikonannya المكونة ديناميكيًا إعادة التفكير في تنفيذ هجمات الكمبيوتر مثل "حقن SQL" (إنجل.حقن SQL). يكمن جوهر الهجوم في حقيقة أن المدمرة تستخدم في البيانات ، والتي يتم تشكيلها ديناميكيًا ، وهي الكود الرئيسي في SQL. يبدو الأمر كذلك ، إذا كانت المعلمات المقدمة ، مأخوذة من نتائج إدخال البيانات باختصار.

Descho تغيير المؤخرة الأمامية:

أعلن 0y varchar (100) ؛

تعيين 0y = "2TOV" ؛ - أخذ tse مي بعيدا عن coristuvach

بافتراض أن الصف يعني المضمن في عبارات SET ، فقد أخذنا كرمز (بغض النظر عن الترتيب ، على سبيل المثال ، من خلال ملحق الويب) ، ثم يوضح المثال السلوك "القياسي" لشفرتنا.

أعلن 0y varchar (100) ؛

SET 0y = "2000 ؛ حذف من dbo.Book2" ؛ - حقنة

EXEC ("SELECT * FROM dbo.Book2 WHERE =" + 0y) ؛

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

تنفيذ sp_executesql

N "حدد * من dbo.Bookl حيث = 0 عام" ،

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

ميتا روبوتي- تعلم كيفية إنشاء وتعديل الإجراءات المخزنة على خادم قاعدة البيانات.

1. تشغيل جميع التطبيقات ، وتحليل نتائج تنفيذها في الأداة المساعدة SQL Server Management Studio. إعادة التحقق من وجود الإجراءات في قاعدة بيانات متدفقة.

2. Vikonannya جميع التطبيقات والمهام في عملية العمل المخبري.

3. البحث عن أوامر فردية للخيارات.

شرح لروبوت vikonannya

لإتقان برمجة الإجراءات المحفوظة ، نستخدم مؤخرة قاعدة البيانات بالاسم كتب_ DB، مثل bula تم إنشاؤه بواسطة روبوت المختبر رقم 1. عندما vykonannі prikladіv أن zavdan يعطي الاحترام لصلاحية أسماء قاعدة البيانات والجدول والكائنات الأخرى للمشروع.

إجراءات التوفيرهي مجموعة من الأوامر التي تتكون من واحد أو مجموعة من عوامل تشغيل SQL أو الوظائف التي يتم تجميعها في قاعدة البيانات في لمحة.

أنواع الإجراءات المحفوظة

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

يتم تنفيذ إجراءات Koristuvatsky ، التي يتم حفظها ، بواسطة هؤلاء chi وغيرهم. إجراءات الادخار - هدف كامل لقاعدة البيانات. اعتمادًا على إجراء الجلد الذي يتم حفظه ، يتم إدراجه في قاعدة بيانات محددة ، de و vikonuetsya.

تستغرق إجراءات التوقيت ، التي يتم حفظها ، ساعة واحدة فقط ، وبعد ذلك يتم تقليلها تلقائيًا بواسطة الخادم. الرائحة الكريهة منتشرة محليًا وعالميًا. لا يمكن استدعاء إجراءات timchasovy المحلية ، التي تم حفظها ، إلا من ذلك اليوم ، على أي حال. تحت ساعة من هذا الإجراء ، من الضروري إعطاء اسم يبدأ من رمز واحد #. مثل جميع كائنات الساعة ، يتم حذف الإجراءات من نفس النوع ، والتي يتم حفظها ، تلقائيًا عند تشغيل الخادم أو إعادة تشغيله أو تشغيل الخادم. تتوفر إجراءات التوقيت العامة التي يتم حفظها لأي يوم خادم يتم فيه استخدام نفس الإجراء. بالنسبة للموعد ، يكفي إعطاء كلمة іm'ya ، والتي تبدأ من ## رموز. تظهر إجراءات Qi عند إعادة تشغيل أي من الخادمين ، وكذلك عند إغلاق الجلسة ، في سياق ما تم إنشاؤه من الرائحة الكريهة.

إنشاء وتغيير الإجراءات التي تم حفظها

إنشاء إجراء يتم الاهتمام به ، ونقل المهمة التالية: تخطيط حقوق الوصول. عند إنشاء إجراء محفوظ ، يجب عليك حماية أنك لن تتمتع بالحق في الوصول إلى كائنات قاعدة البيانات التي قمت بإنشائها ؛ يمكن أن يكون اختيار المعلمات لاختيار الإجراء ، والإجراءات التي تم حفظها ، أم معلمات الإدخال والإخراج ؛ رمز إجراء rozrobka ، scho zberіgaetsya. يمكن أن يحل رمز الإجراء محل تسلسل أي أوامر SQL ، بما في ذلك استدعاء الإجراءات الأخرى التي تم حفظها.

بناء جملة المشغل لإنشاء إجراء جديد أو تغيير صريح في قيم MS SQL Server:

(إنشاء | تغيير) إجراء [EDURE] اسم_إجراء [؛ رقم] [(parameter_name نوع البيانات) [VARYING] [= افتراضي] [إخراج]] [، ... n] [مع (RECOMPILE | ENCRYPTION | RECOMPILE، ENC [FOR نسخ] AS sql_statement [... n]

دعونا نلقي نظرة على معلمات الأمر.

يمكن تعيين بادئات Vikoristovuyuchi sp_ ، # ، ## ، الإجراء الذي تم إنشاؤه ، كنظام أو timchasova. كما يتضح من بناء جملة الأمر ، لا يُسمح بتحديد اسم الرقيب ، الذي يكون الإجراء ضروريًا ، وكذلك اسم قاعدة البيانات ، حيث يمكن وضعها. بهذه الطريقة ، لإنشاء إجراء مخزن في قاعدة بيانات معينة ، من الضروري كتابة الأمر CREATE PROCEDURE في سياق قاعدة البيانات. بمساعدة نص الإجراء ، الذي يتم الاعتناء به ، قبل موضوع قواعد البيانات هذه ، من الممكن تحديد أسماء مختصرة ، لذلك دون تحديد اسم قاعدة البيانات. إذا كنت بحاجة إلى الانتقال إلى الكائنات المدرجة في قواعد البيانات الأخرى ، فأدخل اسم قاعدة البيانات obov'yazkovo.

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

يعني وجود الكلمة الأساسية OUTPUT أنها معلمة تعيين صالحة لتحويل البيانات من الإجراء الذي يتم اتخاذه. ومع ذلك ، فهذا لا يعني أن المعلمة غير مناسبة لتمرير قيمة إلى الإجراء المراد حفظه. يؤدي تحديد الكلمة الأساسية OUTPUT إلى توجيه الخادم ، عند إنهاء الإجراء الذي يتم حفظه ، لتعيين قيمة معلمة تغيير محلية لمؤشر الترابط الذي تم تحديده عند استدعاء الإجراء كقيمة المعلمة. بشكل ملحوظ ، عند تحديد الكلمة الأساسية OUTPUT ، لا يمكن تعيين قيمة معلمة النوع الفرعي للساعة الثانية من الإجراء إلا من خلال تغيير محلي. لا يُسمح بالالتواء سواء كانت virazi أو ثابتًا صالحًا لمعايير كبيرة. يتم استدعاء الكلمة الأساسية VARYING مرة واحدة باستخدام معلمة OUTPUT ، والتي يمكن أن تكون من النوع CURSOR. تم تحديد أن معلمة الإخراج ستكون المضاعف الناتج.

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

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

معلمة FOR REPLICATION للطلب عند نسخ البيانات بما في ذلك الإجراءات التي تم إنشاؤها ، والتي يتم أخذها كمقالات في المنشور. ترشد الكلمة الأساسية ENCRYPTION خادم Viconity إلى تشفير رمز الإجراء المحفوظ ، بحيث يمكنه حماية حماية خوارزميات حقوق النشر التي ينفذها الروبوت الإجراء الذي تم حفظه. يتم وضع الكلمة الأساسية AS على قطعة خبز الجسم ، مما يحفظ الإجراء. في نفس الإجراء ، يمكن تجميد جميع أوامر SQL عمليًا ، ويمكن تعطيل المعاملات ، ويمكن ضبط الحظر ، ويمكن استدعاء الإجراءات الأخرى المحفوظة. يمكن الخروج من الإجراء الذي تم حفظه بمساعدة الأمر RETURN.

إجراءات Vidalennya التي يتم اتخاذها

إجراء الإسقاط (اسم_الإجراء) [، ... ن]

إجراءات Vikonannya التي يتم اتخاذها

للفوز بإجراء ، يكون الأمر: [[EXEC [UTE] اسم_إجراء [؛ رقم] [[@ معلمة_اسم =] (قيمة |name_change) [إخراج] | [افتراضي]] [، ... ن]

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

لم يعد اختيار الكلمة الأساسية OUTPUT لساعة دورة الإجراء صالحًا للمعلمات ، كما لو تم حذف ساعة إنشاء الإجراء باستخدام الكلمة الأساسية OUTPUT.

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

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

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

رابط العودة إلى الإجراءات التي تم حفظها

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

إنشاء إجراء Count_Books AS SELECT COUNT (Code_book) من Books GO

مهمة 1.

عدد_كتب EXEC

تحريف النتيجة.

مثال على إنشاء إجراء باستخدام معلمة إدخال:

إنشاء الإجراء Count_Books_PagesCount_pages AS INT AS حدد COUNT (Code_book) من الكتب حيث الصفحات> =Count_pages اذهب

مدير 2. قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل її لأمر المساعدة

EXEC Count_Books_Pages 100

تحريف النتيجة.

مثال على إنشاء إجراء باستخدام معلمات الإدخال:

إنشاء الإجراء Count_Books_TitleCount_pages AS INT ،Title AS CHAR (10) AS SELECT COUNT (Code_book) من الكتب حيث الصفحات> =Count_pages AND Title_book LIKETitle GO

المهمة 3.قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل її لأمر المساعدة

EXEC Count_Books_Title 100 "P٪"

تحريف النتيجة.

مثال على إنشاء إجراء باستخدام معلمات الإدخال ومعلمات الإخراج:

إنشاء الإجراء Count_Books_ItogoCount_pages INT ،Title CHAR (10) ،Itogo INT OUTPUT AS SELECTItogo = COUNT (Code_book) من الكتب حيث الصفحات> =Count_pages AND Title_book LIKETit

المهمة 4.قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل مجموعة إضافية من الأوامر:

Sql> Declareq كـ int EXEC Count_Books_Itogo 100 ، "P٪" ، خرجq حددq

تحريف النتيجة.

مثال على إنشاء إجراء باستخدام معلمات الإدخال و RETURN:

قم بإنشاء اسم تحقق الإجراءparam INT AS IF (حدد Name_author من المؤلفين حيث Code_author =param) = "Pushkin A.S." العودة 1 آخر العودة 2

المهمة 5.قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل її لأوامر إضافية:

DECLAREreturn_status INT EXECreturn_status = checkname 1 حدد "حالة الإرجاع" =return_status

مثال على إنشاء إجراء بدون معلمات لزيادة قيمة حقل المفتاح في جدول المشتريات مرتين:

إنشاء PROC update_proc كتحديث تعيين المشتريات Code_purchase = Code_purchase * 2

المهمة 6.قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل її لأمر المساعدة

EXEC update_proc

مثال على إجراء بمعامل إدخال لاسترداد جميع المعلومات حول مؤلف معين:

إنشاء PROC select_authork CHAR (30) AS SELECT * من المؤلفين حيث name_author =k

المهمة 7.

EXEC select_author "Pushkin A.S." أو select_author @ k = "Pushkin A.S." أو EXEC select_author @ k = "Pushkin A.S."

مثال على إنشاء إجراء باستخدام معلمة إدخال وقيم للتأمين لزيادة قيمة حقل المفتاح في جدول المشتريات لعدد معين من المرات (للتأمين لمرتين):

CREATE PROC update_procp INT = 2 كتحديث مجموعة المشتريات Code_purchase = Code_purchase *p

الإجراء لا يعكس البيانات المتوقعة.

مدير 8.قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل її لأوامر إضافية:

EXEC update_proc 4 أو EXEC update_procp = 4 أو EXEC update_proc - قيمة zastosovuєtsya للترقية.

مثال على إنشاء إجراء من معلمات الإدخال والإخراج. قم بإنشاء إجراء لتحديد عدد الأوامر المحسوبة لفترة الإشارة:

إنشاء PROC count_purchases @ d1 SMALLDATETIME، @ d2 SMALLDATETIME،c INT OUTPUT AS SELECT @ c = COUNT (Code_purchase) من المشتريات حيث Date_order BETWEEN @ d1 AND @ d2 SETc = ISNULL (@،

مدير 9.قم بإنشاء هذا الإجراء في فرع Stored Procedures في قاعدة بيانات DB_Books باستخدام الأداة المساعدة SQL server Management Studio. قم بتشغيل її لأوامر إضافية:

DECLARE @ C2 INT EXEC count_purchases '01 - Jun- 2006 '، '01 - jul- 2006'، @ c2 OUTPUT SELECT @ c2

خيارات الوصول للعمل المخبري رقم 4

موقف Zagalni.في الأداة المساعدة SQL Server Management Studio ، قم بإنشاء جانب جديد للرمز (زر "إنشاء طلب"). إنشاء قاعدة بيانات نشطة برمجيًا DB_Books خلف مساعدة عبارة الاستخدام. قم بإنشاء إجراءات تهتم بعبارات إجراء الإنشاء الإضافية ، وقم بتعيين أسماء الإجراءات من تلقاء نفسها. إجراء الجلد vikonuvatime بناءً على طلب SQL ، وهو عبارة عن vikonovation من روبوت مختبر آخر. علاوة على ذلك ، يجب تغيير كود SQL بهذه الطريقة ، حتى يتمكنوا من نقل قيم الحقول ، وهي كيفية إجراء البحث.

على سبيل المثال خارج رأس روبوت المختبر رقم 2:

/ * حدد عدد الموظفين البريديين (تسليمات الجدول) ، واسم الشركات والمهاتفة و IPN (الحقول Name_company و Phone و INN) ، والتي لها اسم الشركة (الحقل Name_company) "BAT SVIT".

حدد Name_company ، الهاتف ، INN من عمليات التسليم حيث Name_company = "BAT SVIT"

* / –سيتم إنشاء الإجراء لهذا الروبوت:

إنشاء PROC select_name_companycomp CHAR (30) AS SELECT Name_company، Phone، INN FROM Deliveries WHERE Name_company =comp

- لبدء الإجراء ، يتم إعطاء الأمر:

EXEC select_name_company "BAT SVIT"

قائمة المديرين

قم بإنشاء برنامج جديد في SQL Server Management Studio. إنشاء قاعدة بيانات فردية نشطة برمجيًا ، تم إنشاؤها في روبوت المختبر رقم 1 ، لمساعدة عامل الاستخدام. قم بإنشاء إجراءات تهتم بعبارات إجراء الإنشاء الإضافية ، وقم بتعيين أسماء الإجراءات من تلقاء نفسها. إجراء الجلد vikonuvatime بناءً على طلب SQL ، كما هو معروض في عرض المهمة التالية للخيارات.

الخيار 1

1. أدخل قائمة spivrobitnikiv ، قد يرغب yakі في طفل واحد.

2. أدخل قائمة الأطفال الذين شاهدوا هدايا في نهاية الفترة.

3. أدخل قائمة batkіv ، yakі mayutn inopnolіtnі الأطفال.

4. أدخل معلومات حول الهدايا بكمية أكبر من الكمية المحددة ، مرتبة حسب التاريخ.

الخيار 2

1. أدخل قائمة الملحقات بالنوع المخصص.

2. أبلغ عن عدد إصلاحات التركيبات والعدد الإجمالي للإصلاحات في سيد معين.

3. أدخل قائمة vlasniks من التجهيزات وعدد الحيوانات ، وفرز لعدد الحيوانات وكيفية السقوط.

4. أدخل معلومات حول الوظائف ذات رقم مخصص أعلى أو بتاريخ قبول لوظيفة أقل من التاريخ المحدد.

الخيار 3

2. أدخل قائمة بأكواد المبيعات ، والتي تم بيع الألوان لها بمبلغ أكبر من المبلغ المحدد.

3. أدخل تاريخ البيع والمبلغ والبائع والتذكرة لرمز البيع المحدد.

4. أدخل قائمة التذاكر ودرجة التذاكر التي يزيد ارتفاعها عن الرقم المحدد أو أكثر أناقة.

الخيار 4

1. أدخل قائمة التسميات من المؤشرات المخصصة قبل التوقف.

2. أدخل قائمة تواريخ التسليم ، والتي تم بيع أكثر من الرقم المخصص لها من نفس liqs.

3. أدخل تاريخ التسليم ، المبلغ ، PIB للكمية وفقًا للمورد وسأقوم بتسمية liqiv بعد رمز الحاجة لأكثر من الكمية المحددة.

الخيار 5

2. أدخل قائمة بالممتلكات المدينة لسبب محدد.

3. أدخل تاريخ تاريخ الاستحقاق ، وسأقوم بتسمية الحيازة ، PIB لتاريخ الخصم لخصم الفترة المخصومة.

4. أدخل قائمة الممتلكات من النوع المحدد أو مع تاريخ ملكية أكبر من القيمة الأولى

الخيار 6

1. أدخل قائمة التأمينات لأكثر من الرقم المحدد.

2. أدخل قائمة المنتجات ، التي تستخدم معانيها ، جزء من كلمة.

3. أدخل اسم المنتج ، وقم بتسمية السطر ، وقم بتسمية المنتج برمز السطر من القيمة الأولية المحددة بعد القيمة النهائية الأولى.

4. أدخل ترتيب تحضير التسريب وقم بتسمية التسريب بعدد الكربوهيدرات أكثر للقيمة الأولى ، أو كمية السعرات الحرارية الأكثر للقيمة المشار إليها.

الخيار 7

1. أدخل قائمة الممارسين من الزراعة المعينة.

3. أدخل تاريخ التسجيل ونوع الوثيقة و PIB للمسجل واسم المنظمة للمستندات المسجلة لتعيينات الفترة.

4. أدخل قائمة المستندات المسجلة بنوع المستند الأول أو بتاريخ تسجيل أكبر من القيمة المحددة.

الخيار 8

1. أدخل قائمة الممارسين مع وجود سبب محدد للمكالمة.

3. أدخل تاريخ التسجيل ، وسبب التسجيل ، و PIB من المرجع للوثائق المسجلة لتعيينات الفترة.

الخيار 9

1. أدخل قائمة الممارسين الذين سُمح لهم بإدخال النوع المحدد.

2. أدخل قائمة الوثائق مع تاريخ التسجيل لتعيينات الفترة.

3. أدخل تاريخ التسجيل ، نوع التصريح ، PIB للإشارة إلى المستندات المسجلة لتعيينات الفترة.

4. أدخل قائمة الوثائق المسجلة من رمز الوثيقة في النطاق المعين.

الخيار 10

1. أدخل قائمة الممارسين من الزراعة المعينة.

2. أدخل قائمة الوثائق التي قد يكون لها معاني جزء من كلمة.

3. أدخل تاريخ التسجيل ونوع الوثيقة و PIB للمالك واسم المنظمة للمستندات المسجلة لتعيينات الفترة.

4. أدخل قائمة المستندات المسجلة من نوع المستند المحدد أو برمز مستند أقل من القيمة الأخيرة.

الخيار 11

1. أدخل قائمة الممارسين المعترف بهم للزراعة المعينة.

2. أدخل قائمة الوثائق مع تاريخ التسجيل لتعيينات الفترة.

3. أدخل تاريخ التسجيل ، التسوية ، PIB للمرجع للوثائق المسجلة لتعيينات الفترة.

4. أدخل قائمة الوثائق المسجلة من رمز الوثيقة في النطاق المعين.

الخيار 12

3. أدخل قائمة الاختصاصات ، وكيف حصلوا عليها من تأجير هذا العدد من الحيوانات ، وفرز عدد الحيوانات وكمية السقوط.

الخيار 13

1. أدخل قائمة الممتلكات من النوع المخصص. 2. أدخل قائمة الممتلكات ، كما لو كانت شطب ممارس الغناء.

3. أدخل مبلغ الممتلكات التي تم إيقاف تشغيلها ، والتي تم تجميعها وفقًا لأنواع الممتلكات.

4. أدخل معلومات حول التوظيف مع تاريخ التوظيف أكثر من التاريخ الأول.

الخيار 14

1. أدخل قائمة التذاكر من نوع الورقة المعين.

2. أدخل قائمة رموز الحاجة ، والتي تم بيع الألوان لها بمبلغ يزيد عن قيمة واحدة.

3. أدخل تاريخ تاريخ الاستحقاق ، والمبلغ ، واسم عامل البريد واللون الذي يلي رمز غناء العامل البريدي.

4. أدخل قائمة الألوان والدرجة للتذاكر التي يزيد ارتفاعها عن رقم الأغنية أو أكثر أناقة.

الخيار 15

1. أدخل قائمة العملاء الذين وصلوا إلى أرقام مدة المواعيد.

2. أدخل المبلغ الإجمالي للمدفوعات لأرقام عملاء البشرة.

3. أدخل تاريخ الوصول ، نوع الغرفة ، PIB للعملاء ، التسجيلات لفترة المواعيد.

4. أدخل قائمة العملاء المسجلين للغرف الفردية.

الخيار 16

1. أدخل قائمة الممتلكات من النوع المخصص.

2. أدخل قائمة الممتلكات ، مثل استئجار عميل أغنية.

3. أدخل قائمة osіb ، التي استحوذ عليها الياكي من تأجير هذا العدد من الحيوانات ، مرتبة حسب عدد الحيوانات وكيفية السقوط.

4. أدخل معلومات حول العملاء مرتبة حسب العناوين.

الخيار 17

1. أدخل قائمة قيم من سعر الشراء أكبر من القيمة الأولية ، أو من خلال مدة الضمان أكبر من الكمية المحددة.

2. لتعريف مكان أهمية القيم المادية ، يشار إلى الكلمة في أسماء هؤلاء.

3. أدخل مجموع قيم vartosti من رمز النطاق المحدد.

4. أدخل قائمة الشروط الصالحة ماديًا من تاريخ القبول للعمل في النطاق المحدد.

الخيار 18

1. Vivest تغيير إصلاح الروبوتات ، vikonanih يغني سيد.

2. أدخل قائمة بمراحل العمل التي تدخل قبل العمل ، والتي تحتوي أسماءها على كلمة معينة.

3. أدخل مجموع تكلفة خطوات أعمال الإصلاح للعمل من الكود الخاص بالنطاق المحدد.

4. أدخل قائمة الملفات من تاريخ الدخول إلى الروبوت في النطاق المحدد.

الخيار 19

1. أدخل قائمة liqiv من القراءات الأولى.

2. أدخل قائمة بأرقام الشيكات التي تم بيع أكثر من رقم واحد من liqs لها.

3. أدخل تاريخ البيع والمبلغ ورقم PIB للصراف والصراف للشيك من الرقم المخصص.

4. أدخل قائمة liqs وأحدها لـ liqs بكمية في عبوة أكبر من الكمية المشار إليها أو برمز liq أقل من القيمة الأولى.

الخيار 20

1. أدخل قائمة الممارسين من الزراعة المعينة.

2. أدخل قائمة الوثائق التي قد يكون لها معاني جزء من كلمة.

3. أدخل تاريخ التسجيل ونوع المستند وتاريخ PIB وواقعة التاريخ للمستندات المسجلة لفترة معينة.

4. أدخل قائمة المستندات المسجلة من نوع المستند المحدد أو رمز المستند للمدى الأول.

إجراءات التوفير

يعد موضوع هذا التوزيع من أهم الأدوات التي تم تقديمها لتجار التجزئة عن طريق إضافات قواعد بيانات InterBase لتنفيذ منطق الأعمال. وتغيير مقدار الكود المطلوب لإعداد المهام من المستحيل عمليا إكمال برنامج قاعدة بيانات دون تغيير الإجراءات المحفوظة.
في حين أن هناك مجموعة واسعة من الإجراءات التي يجب حفظها والتي تعتبر مهمة لمعظم أنظمة DBMS العلائقية ، يمكن أن تلعب إجراءات InterBase دور مجموعات البيانات الكاملة عمليًا ، مما يسمح لها بتدوير النتائج في استعلامات SQL محددة.
Rosobniks ، يدفعون في كثير من الأحيان ، يتعلمون إجراءات soberezhezhe فقط yak nabir من sql-zapitiv محدد ، yaki shit بجد ، و prazuvati هو ميل من الوقت ، والمستوى العالي الحقيقي.
إذن ما هي الإجراءات المخزنة في InterBase؟
الإجراء المحفوظ (CP) هو جزء من البيانات الوصفية لقاعدة البيانات ، والتي يتم تجميعها من البرنامج الفرعي لتطبيق InterBase الداخلي ، والمكتوب بلغة خاصة ، المترجم الذي يتم إدراجه في قلب خادم InteiBase
يمكن استدعاء حفظ إجراء من برامج العميل ، من المشغلات والإجراءات الأخرى التي تم حفظها. يتم حفظ الإجراء في منتصف عملية الخادم ويمكنك معالجة البيانات الموجودة في قاعدة البيانات ، وكذلك تشغيل العميل حول كيفية النقر فوق (تلك المشغلات ، HP ، الملحق) نتائج فوزك
أساس الاحتمالات الصعبة التي وضعتها HP هو البرمجة اللغوية الإجرائية ، والتي يمكن إجراؤها في المستودع الخاص بها ، مثل تعديل مقترحات SQL الرائعة ، مثل INSERT و UPDATE و SELECT ، فضلاً عن تنظيم التحليل والدورات (IF ، WHILE) ، بالإضافة إلى المواقف الخاطئة ، تسمح إجراءات Mova المحفوظة بتنفيذ خوارزميات قابلة للطي للعمل مع البيانات ، والتركيز على العمل مع البيانات العلائقية لـ HP يكون أكثر إحكاما بشكل ملحوظ للإجراءات المماثلة مع اللغة التقليدية.
وتجدر الإشارة إلى أن الزناد هو المنتصر بنفس البرمجة ، والجريمة منخفضة في الميزات والحدود. Vіdmіnnostі pіdmіnnostі pіdnіzhini movi ، scho vikoristovuєєtsya in trigery ، ورد أن vіd mivi KHP تمت مراجعته في قسم "Trigeri" (الجزء 1).

مثال على إجراء بسيط تم حفظه

لقد حان الوقت لإنشاء الإجراء الأول ، والذي يتم حفظه ، وفي النهاية ، عملية إنشاء إجراءات الحفظ. البيرة لبداية القادم ليقول بضع كلمات عن هؤلاء ، وكيفية التدرب على الإجراءات التي تم حفظها. توصي وثائق InterBase بإنشاء إجراءات لملفات إضافية في سكربتات SQL ، والتي ستقوم بتنظيف نص CP ، حيث يتم تقديمها إلى مدخلات مترجم isql ، وبهذه الطريقة ، يتم إنشاء هذا التعديل في CP ، كما في SQL هذا البرنامج النصي في مرحلة تجميع BLR في نص إجراء BLR (حول نص إجراء BLR ، انظر Rozdіl "بنية قواعد البيانات InterBase" (الجزء 4)) winkle pardon ، ثم isql سيُظهر لك عن هؤلاء ، على أي صف من SQL النصي ملف winkla tsya العفو. صحح العفو وكرر كل شيء من الخلف إلى الوراء. حول nagodzhennya في الفهم اليومي للكلمة ، أي حول trasuvannya vykonannya ، مع إمكانية الإعجاب بالمعاني المتغيرة للتغيير ، لا يمكنك الخروج عن طريقك. من الواضح أن مثل هذا pidhid لا يتناسب مع الزيادة في خصوصية الإجراءات المحفوظة في أعين بائع التجزئة.
البروتين ، كريم النهج المعياري البسيط لتطوير HP<_\ществ\ют также инструменты сторонних разработчиков, которые делают работу с хранимыми процедурами весьма удобной Большинство универсальных продуктов для работы с InterBase, перечисленных в приложении "Инструменты администратора и разработчика InterBase", предоставляют удобный инструментарий для работы с ХП. Мы рекомендуем обязательно воспользоваться одним из этих инструментов для работы с хранимыми процедурами и изложение материала будем вести в предположении, что у вас имеется удобный GUI-инструмент, избавляющий от написания традиционных SQL-скриптов
يتم وصف بناء جملة الإجراءات المحفوظة في الخطوة التالية:

إنشاء اسم الإجراء
[(نوع بيانات بارام [، نوع بيانات بارام ...])]
)]
مثل
;
< procedure_body> = []
< block>
< vanable_declaration_list> =
إعلان متغير نوع بيانات var ؛

=
يبدأ
< compound_statement>
[< compound_statement> ...]
نهاية
< compound_statement> = (بيان؛)

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

إنشاء إجراء SP_Add (أول_ دقة مضاعفة ،
second_arg دقة مزدوجة)
العوائد (نتيجة الدقة المزدوجة)
مثل
يبدأ
النتيجة = first_arg + second_arg ؛
تعليق؛
نهاية

حسنًا ، كل شيء بسيط: بعد الأمر CREATE PROCEDURE ، يتم تحديد اسم الإجراء الذي تم إنشاؤه حديثًا (والذي قد يكون فريدًا عند حدود قاعدة البيانات) - لإسقاط SP_Add ، ثم للأذرع ، والتي من خلالها يتم تحديد معلمات الإدخال الخاصة بـ يتم إعادة تعيين نوع HP - أول_أولى وثاني_arg - من القيم المخصصة.
قائمة معلمات الإدخال في الجزء غير المتعلق باللغة من عبارة CREATE PROCEDURE - يتم اجتياز التخطيات ، إذا تم أخذ جميع البيانات الخاصة بإجراء العمل الخاص بها لإدخال إضافي إلى الجدول في منتصف نص الإجراء.

في الإجراءات التي تم حفظها ، هناك أنواع البيانات العددية InteiBase

أعط الكلمة الرئيسية RETURNS ، وبعد ذلك يتم إعادة ترتيب المعلمات في الذراعين ، والتي يتم تدويرها وفقًا للأنواع المعينة - في هذه الفئة واحدة فقط - النتيجة.
كيف أن الإجراء غير مذنب بتناوب المعلمات ، وكلمة RETURNS وقائمة المعلمات التي سيتم تدويرها ، يوميًا.
بعد تحديد الكلمة الأساسية RETURNSQ AS. قبل الكلمة الأساسية العنوان،وبعد واحدة جديدة - تكنوإجراءات.
نص الإجراء ، المأخوذ ، هو نسخة من أوصاف التغييرات الداخلية (المحلية) (مثل الرائحة الكريهة ، سننظر إليها أدناه) ، والتي تم تقسيمها بنقطة بعد غيبوبة (؛) ، وكتلة من المشغلين ، الأماكن في قوس المشغل BEGIN END. في هذه الحالة ، يكون جسم HP أبسط - نطلب منك إضافة وسيطتي إدخال وإرفاق النتيجة بالمخرجات ، ثم استدعاء الأمر SUSPEND. Trohi pіznіshe roz 'من الواضح جوهر أمر الاختلاف ، لكن في الوقت الحالي من المهم أنه ضروري لنقل المعلمات التي تتحول إلى هناك ، أنقذت نجوم bula viklikan الإجراء.

الاختلافات في الإجراءات التي تم حفظها

احترم أن العامل الذي في منتصف الإجراء سينتهي بنقطة بغيبوبة (؛). على ما يبدو ، فإن النقطة التي يخرج بها موزع أوامر SQL القياسي هي إشارة إلى مترجم SQL بأن نص أمر المقدمة صحيح ويحتاج إلى معالجته. تشي لا يرى ذلك ، scho ، يظهر بقعة مع غيبوبة في منتصف HP ، يتعرف مترجم SQL على أن الأمر قد تم إدخاله بالضبط ويحاول إجراء جزء من الإجراء ، فما الذي تم اتخاذه؟ Tse pripuschennya ليس بالمعنى الدقيق للكلمة. على سبيل المثال ، إذا قمت بإنشاء ملف ، وفي هذه الحالة يمكنك كتابة إرشادات ، وإضافة أمر للبدء من قاعدة البيانات وتجربة برنامج SQL النصي بمساعدة مترجم isql ، فسيتم تشغيل العفو ، وسيظهر أن تكون غير مناسبة ، في فكر المترجم الشفهي ، في نهاية الأمر ، إنشاء الإجراءات التي يتم اتخاذها. من أجل حفظ إجراءات ملفات نصية SQL إضافية ، دون استخدام أدوات متخصصة في InterBase roamer ، من الضروري قبل أمر الجلد إنشاء HP (نفس الشيء ينطبق على المشغلات) إلهام اليوغا. يبدو الأمر isql ، الذي يغير مقسم اقتراح SQL ، كما يلي:

اضبط المدة

للحصول على طريقة نموذجية لإنشاء إجراء ما ، فإن ما يتم الاعتناء به يبدو كالتالي:

تعيين المدة ^ ؛
إنشاء إجراء some_procedure
... . .
نهاية
^
اضبط المدة ؛ ^

إجراءات التوفير الأسبوعية

دعنا ننتقل إلى إجراءاتنا ، ما الذي يجب الاهتمام به. الآن ، إذا تم إنشاؤه ، فمن الضروري الاتصال ، وتمرير المعلمات وأخذ النتائج التي يتم تدويرها. من الأسهل القيام بذلك - يكفي كتابة استعلام SQL للحصول على مظهر مسيء:

تحديد*
من Sp_add (181.35 ، 23.09)

يطلب منا Tsei تحويل صف واحد إلينا ، والذي سيأخذ حقل نتيجة واحد فقط ، حيث سيتم تغيير مجموع العددين 181.35 و 23.09 ، ثم 204.44.
بهذه الطريقة ، يمكن اختراق إجراءاتنا في استعلامات SQL الخاصة ، والتي يتم اختراقها كما هو الحال في برامج العميل ، وكذلك في HP أو المشغلات الأخرى. أصبح هذا الاختلاف في إجراءنا ممكنًا عن طريق إضافة الأمر SUSPEND إلى نهاية الإجراء الذي سيتم اتخاذه.
على اليمين ، في InterBase (وفي جميع نسخه) هناك نوعان من الإجراءات المحفوظة: الإجراءات القابلة للتحديد والإجراءات القابلة للتنفيذ. ترتبط حقيقة أن الروبوتات لديها نوعان من HP بحقيقة أن إجراءات التحديد تبدو لتدوير مجموعة غير شخصية من معلمات الإدخال مجمعة في صف واحد ، كما لو كان بإمكانهم إلقاء نظرة على مجموعة من البيانات ، وإما أن إجراءات viconation لا يمكن تدويرها المعلمات ، أو يمكنهم تدويرها بمفردها في المرتجعات ، دي صف واحد من المعلمات. يتم استدعاء الإجراءات المحددة بجوار استعلامات SELECT ، وتتبع الإجراءات التي يتم استدعاؤها مساعدة الأمر EXECUTE PROCEDURE.
بعد الإساءة إلى رؤية الإجراءات التي تم حفظها ، نفس بناء جملة الإنشاء ولا تتحدى أي شيء رسميًا ، ثم ما إذا كان يمكن استخدام الإجراء في استعلام SELECT وما إذا كان تحديد الإجراء هو لمساعدة EXECUTE PROCEDURE. التغذية هي كيف يتصرف الشلل الدماغي مع أنواع مختلفة من الشر. بمعنى آخر ، يختلف الاختلاف في تصميم الإجراء لنوع الغناء الأسبوعي. لذلك يتم إنشاء إجراء التحديد خصيصًا لاستعلام الاستعلام SELECT ، ويتم إنشاء الإجراء المحدد خصيصًا لاستعلام الاستعلام EXECUTE PROCEDURE. دعنا نلقي نظرة على الصلاحيات التي يتم أخذها في الاعتبار عند تصميم هذين النوعين من HP.
لفهم كيفية ممارسة اهتزاز الإجراء ، للحصول على القليل من النظرية. دعنا نحصل على استعلام SQL بسيط مثل معرف التحديد ، NAME FROM Table_example. نتيجة لذلك ، نأخذ في الاعتبار جدول الإخراج ، والذي يتكون من عمودين (ID و NAME) ونفس عدد الصفوف (عدد الصفوف المتساوي في الجدول Table_example). تم تحويل الجدول إلى نتائج هذا الاستعلام ، ويطلق عليه أيضًا مجموعة بيانات SQL. . ثم يقوم الخادم بقراءة السجل الجلدي ، والذي يقوم بإرسال نتائج الطلب ، وتحديد الحقول المطلوبة منه (في حالة المعرف والاسم) وإرسال الرسالة إلى العميل. دعنا نكرر العملية مرة أخرى - وهكذا بالنسبة لسجل اهتزاز الجلد.
جميع الخطوات ضرورية للقارئ الذكي لفهم أن جميع مجموعات بيانات SQL تتشكل على التوالي ، بما في ذلك الإجراءات التي يتم حفظها! vіdminnіst الرئيسي لإجراءات اختيار الإجراءات ، والتي تستند إلى حقيقة أن الإجراءات الأولى مصممة لتقليب الصفوف المجهولة الهوية ، وغيرها - فقط لواحد. هذا هو السبب في أن الرائحة الكريهة zastosovyatsya بطريقة مختلفة: يستدعي اختيار الإجراء مساعدة أمر SELECT ، مثل "wimage" في الإجراء للتحقق من جميع السجلات ، حتى تتمكن من قلبها. يتم استدعاء الإجراء ، الذي يسمى ، لمساعدة إجراء التنفيذ ، مثل "wiymaє" من HP صف واحد فقط ، و reshta (navit yakshcho stink!) تجاهل.
دعنا نلقي نظرة على مثال إجراء الاختيار ، بحيث يصبح أكثر وضوحًا. من أجل> التسامح ، دعنا نحفظ الإجراء ، yak pratsyuє لذلك هو نفسه ، yak zap SELECT ID ، NAME FROM Table_Example ، لذلك لن تتمكن من تحديد الحقول ID і NAME z usієї table. محور tsey بعقب:

إنشاء إجراء Simple_Select_SP
عائدات (
عدد صحيح procID ،
procNAME VARCHAR (80))
مثل
يبدأ
ل
حدد المعرف ، الاسم من table_example
INTO: procID ،: procNAME
فعل
يبدأ
تعليق؛
نهاية
نهاية

دعنا نلقي نظرة على الإجراء المسمى Simple_Select_SP. في واقع الأمر ، لا توجد معلمات إدخال ومعلمات إخراج - ID و NAME. Naytsіkavіshe ، zvichayno ، polaga في إجراء tіlі. هنا هو بناء FOR SELECT:

ل
حدد المعرف ، الاسم من table_example
INTO: procID ،: procNAME
فعل
يبدأ

/ * نحتاج إلى تغيير procID و procName * /

نهاية

يعني رمز shmachok هذا الهجوم: لصف الجلد ، المحدد من جدول Table_example ، حدد قيمة التغيير procID و procName ، ثم أضف قيمة التغيير.
يمكنك تحديد المظهر وطلب: "التغيير؟ وإلا كيف التغيير 9" إذا كان الأمر مشابهًا لمفاجأة الاختلاف - أولئك الذين هم في الإجراءات التي تم حفظها ، يمكننا الفوز بالتغيير. بلغة HP ، يمكنك التعبير عنها كتغيير محلي في منتصف الإجراء ، والتغلب على معلمات الإدخال والإخراج كما تم تغييرها.
للإعلان عن تغيير محلي في الإجراء الذي يتم حفظه ، من الضروري تضمين وصف بعد الكلمة الأساسية AS وقبل الكلمة الأولى BEGIN. يبدو وصف التغيير المحلي كما يلي:

إعلان متغير ;

على سبيل المثال ، للإعلان عن طول التغيير المحلي Mylnt ، من الضروري الإدراج بين الوصف الهجومي AS و BEGIN

إعلان متغير MyInt INTEGER ؛

التغييرات في مؤخرتنا مصنوعة من قطعتين. والسبب هو أنه من الضروري تغييرها في منتصف الأمر FOR SELECT SQL ، لفصل الحقول في الجداول التي تم تحديدها في SELECT ، ولتغييرها ، من الضروري نقل بقية الزوجي. حتى إذا قمت بالتغيير ، يمكنك تسمية نفس الاسم ، مثل الحقول الموجودة في الجداول!
Ale dvokrapka أمام اسم التغيير ضروري للفوز فقط في منتصف استعلامات SQL. قف مع نصوص الوحش للقتال حتى الموت بدون dvokrapka ، على سبيل المثال:

procName = "اسم ما" ؛

دعنا ننتقل إلى جسم إجراءنا. يقوم الاقتراح FOR SELECT بتدوير البيانات عبر الجداول المرئية - مجموعة من البيانات ، وصف واحد في كل مرة. يمكن وضع حقل الجلد الذي تم تدويره في التغيير الخاص به: ID => procID ، NAME => procName. في جزء من DO والتغييرات يُطلب من العميل ، الذي دعا الإجراء> p> ، للحصول على مساعدة الأمر SUSPEND
بهذه الطريقة ، ينظم الأمر FOR SELECT ... DO حلقة من السجلات التي تم تحديدها في جزء SELECT من الأمر. في نفس الدورة ، والتي تعد جزءًا من DO ، يتم إتمام نقل السجل الذي تمت صياغته إلى العميل بعد إتمام أمر SUSPEND الإضافي.
أيضًا ، يتم التعرف على إجراء الاختيار لتدوير صف واحد أو أكثر ، حيث يتم تنظيم دورة في منتصف جسم HP ، مما يؤدي إلى استعادة تغييرات المعلمة الناتجة. على سبيل المثال ، يجب استخدام الأمر SUSPEND للدورة الأخيرة من الدورة ، كما لو كان يتم تحويل صف البيانات إلى العميل.

الدورات والمشغلين

أوامر Krim FOR SELECT ... DO ، التي تنظم دورة من سجلات أي اختيار ، نوع آخر من الدورات - بينما ... DO ، والذي يسمح لك بتنظيم دورة على أساس إعادة التحقق من أي عقول. محور الأسهم HP ، دورة scho vikoristovu بينما. فعل. يقوم هذا الإجراء بتدوير مربعات الأعداد الصحيحة من 0 إلى 99:

إنشاء PROCEDJRE QUAD
العوائد (رباعي صحيح)
مثل
أعلن متغيرًا صحيحًا ؛
يبدأ
أنا = 1 ؛
عندما أنا<100) DO
يبدأ
QUADRAT = أنا * أنا ؛
أنا = أنا + 1 ؛
تعليق؛
نهاية
نهاية

كنتيجة لطلب SELECT FROM QUAD ، نحتاج إلى جدول سيحل محل صف واحد من QUADRAT ، والذي سيحتوي على مربعات من الأعداد الصحيحة من 1 إلى 99
لتعداد نتائج اهتزاز SQL والدورة الكلاسيكية ، في إجراءات النقل المحفوظة ، يتم تحديد عامل IF ... ثم ... ELSE ، والذي يسمح لك بتنظيم الترسيم في المغالطة في النسخ الاحتياطي في المستقبل ، سواء كانت الصيغة مشابهة لغالبية عوامل فك الضغط في برمجة الحركات ذات المستوى العالي ، على مربع باسكال و Cі.
دعونا نلقي نظرة على المثال القابل للطي للإجراء الذي يتم حفظه ، وذلك لسرقة قدميه.

  1. احسب متوسط ​​السعر في الجدول Table_example (div. "Tables Primary Keys and Generators")
  2. دالي للجلد يسجل في الجدول ليبدأ اعادة التدقيق حيث ان السعر الاساسي (PRICE) اعلى من متوسط ​​السعر ثم اضبط السعر مساويا لقيمة متوسط ​​السعر اضافة الى ضبط تثبيت الماء
  3. إذا كان السعر أقل أو أكثر من متوسط ​​السعر ، فقم بتعيين السعر المساوي للسعر الإجمالي ، مضافًا إليه نصف سعر التجزئة بين متوسط ​​السعر.
  4. قم بتدوير جميع تغييرات الصف في الجدول.

بالنسبة إلى cob ، يكون اسم HP مهمًا ، بالإضافة إلى معلمات الإدخال والإخراج. يتم كتابة كل شيء في رأس الإجراء ، والذي يتم حفظه

إنشاء إجراء زيادة الأسعار (
Percent2 زيادة الدقة المزدوجة)
RETURNS (ID INTEGER، NAME VARCHAR (SO)، new_price ضعف
الدقة AS

سيطلق على الإجراء اسم "زيادة الأسعار" ، ويحتوي على معلمة إدخال واحدة Peiceni21nciease ، والتي قد تكون من النوع DOUBLE PRECISION ، و 3 معلمات إدخال - ID و NAME و new_pnce. يرجى ملاحظة أن أول معلمتين قد يكون لهما نفس الأسماء ، مثل الحقول الموجودة في جدول Table_example ، والذي نختار التحليل بهما. يسمح Tse بقواعد إجراءات mov المحفوظة.
الآن من الخطأ التعبير عن التغيير المحلي ، بحيث تكون منتصرًا من أجل حفظ متوسط ​​القيمة. ستبدو كما يلي:

إعلان متغير avg_price ضعف الدقة ؛

الآن دعنا ننتقل إلى جسم الإجراء ، الذي يتم الاعتناء به الكلمة الرئيسية تبدأ.
نحتاج إلى حساب المرة الأولى للخوارزمية الخاصة بنا - احسب متوسط ​​السعر. لمن نسارع بطلب من هذا النوع:

حدد AVG (السعر_ل)
من Table_Example
إلى الداخل: متوسط ​​السعر ، -

سيؤدي ذلك إلى تغذية دالة التجميع المتغيرة AVG ، بحيث تقوم بتدوير متوسط ​​قيمة الحقل PRICE_1 لمتوسط ​​الصفوف المحددة - متوسط ​​قيمة PRICE_1 لجميع الجداول Table_example. يتم وضع القيمة التي يتم تدويرها بواسطة الطلب في تغيير متوسط ​​السعر. لاستعادة الاحترام ، الذي تم تغييره avg_pnce أمام رفرف مزدوج ، من أجل إحياء المياه المنتصرة في الطلب.
خصوصية هذا الطلب هي أولئك الذين يقومون دائمًا بالتحقق بدقة من إدخال واحد. تسمى هذه الطلبات الطلبات الفردية ويمكن اختيار هذه الاختيارات فقط في الإجراءات المحفوظة. إذا كنت ترغب في تدوير أكثر من صف واحد ، فمن الضروري وضع هيكل FOR SELECT ... DO من أجل تنظيم دورة لمعالجة صف الجلد الذي يتم تدويره.
Otzhe ، حصلنا على متوسط ​​قيمة السعر. الآن من الضروري مراجعة جميع الجداول ، لمقارنة قيمة السعر في سجل الجلد بمتوسط ​​السعر والعيش في
على قطعة خبز نقوم بتنظيم فرز سجل الجلد من الجدول Table_example

ل
حدد معرّف ، NAME ، PRICE_1
من Table_Example
INTO: المعرف ،: NAME ،: new_price
فعل
يبدأ
/ * _ هنا نفتح سجل الجلد * /
نهاية

عندما يتم تغيير التصميم من الجدول Table_example ، سيتم إعطاء قيم البيانات والري في صف الجلد معرفًا متغيرًا ، NAME و new_pnce. من الواضح أنك تتذكر أن البيانات المحددة سيتم تدويرها نتيجة لذلك ، وليس varto: حقيقة أن معلمات الإخراج قد تم تعيينها لا تعني أن العميل يرفض قيمة qi لعميل HP! يكون نقل المعلمات ممكنًا فقط عندما يتم تعطيل الأمر SUSPEND ، وقبل ذلك يمكننا تغيير المعلمات الافتراضية كالتغيير الأساسي - في تطبيقنا ، نعمل أيضًا مع المعلمة new_price.
أيضًا ، في منتصف جسم BEGIN .. END الدورة ، يمكننا تعديل قيمة صف الجلد. كما تتذكر ، من الضروري أن نعرف ، كثمن أساسي ، أن نرتفع عن المتوسط ​​، ونعيش في الأيام الخوالي. يتم تنفيذ إجراء Qiu لمطابقة mi بمساعدة مشغل IF:

إذا (new_price> avg_price) ثم / * يكون السعر الحالي أعلى بالنسبة لمتوسط ​​السعر * /
يبدأ
/ * ثم حدد سعرًا جديدًا مساويًا لقيمة متوسط ​​السعر بالإضافة إلى تحديد المئات * /
new_price = (avg_price + avg_price * (Percent2Increase / 100)) ؛
تحديث Table_example
ضبط PRICE_1 =: new_price
أين المعرف =: المعرف ؛
نهاية
آخر
يبدأ
/ * إذا كان السعر الفعلي أقل أو أكثر من متوسط ​​السعر ، فسنقوم بتعيين السعر المساوي للسعر الإجمالي ، بالإضافة إلى نصف سعر التجزئة بين متوسط ​​السعر هذا * /
new_price = (new_pnce + ((avg_pnce new_price) / 2)) ؛
تحديث Table_example
ضبط PRICE_1 =: new_price
حيث المعرف = .ID ؛
نهاية

مثل bachite ، كان من الرائع إكمال بناء IF الرائع ، من المهم مناقشته ، لذلك لا تعلق ، مثل الكتابة في الرمز / ** /.
من أجل تغيير السعر بنفس الطريقة إلى سعر التجزئة المحسوب ، نقوم بتسريع عامل التشغيل UPDATE ، والذي يسمح لك بتعديل السجلات الفعلية - واحدة أو أكثر. للإشارة بشكل لا لبس فيه إلى السجل الذي تحتاج إلى تغيير السعر فيه ، فسنربح لفهم حقل WHERE للمفتاح الأساسي ، والذي يساوي قيمة التغيير ، حيث يتم أخذ قيمة المعرف لسجل الدفق: ID =: بطاقة تعريف. انتبه إلى أنه تم تغيير الهوية أمام الزوجي.
بعد تغيير IF ... ثم ... ELSE ، يكون لدى المعرف الذي تم تغييره و NAME و new_price بيانات ، حيث تقع على عاتقنا مسؤولية تحويل العميل إلى استدعاء الإجراء. إذا كان من الضروري إدخال أمر SUSPEND التالي ، بحيث يتم إرسال البيانات هناك ، تسمى النجوم HP. حدد ... لا تتكرر على جميع السجلات في طلبك.
من الضروري تحديد استخدام الأمر SUSPEND ، بحيث يتم حفظ الإجراء المراد حفظه فقط ، ويتم استخدام الأمر EXIT ، بحيث يتم حفظ الإجراء بعد نقل الصف. ومع ذلك ، نادرًا ما يحتاج الأمر EXIT إلى الإكمال ، فالرقائق مطلوبة بشكل أساسي من أجل مقاطعة الدورة في متناول العقل.
في حالة الرجوع إلى الحالة السابقة ، إذا تم استدعاء الإجراء بواسطة عبارة SELECT وتم إكماله باستخدام EXIT ، فلن يتم تدوير الصف المتبقي. Tobto ، إذا كنت بحاجة إلى مقاطعة الإجراء وما زلت تأخذ الصف ، فأنت بحاجة إلى تسريع التسلسل

تعليق؛
خروج؛

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

إنشاء إجراء زيادة الأسعار (
Percent2 زيادة الدقة المزدوجة)
العوائد (رقم التعريف الصحيح ، الاسم فاركار (80) ،
new_price ضعف الدقة) AS
إعلان متغير avg_price ضعف الدقة ؛
يبدأ
حدد AVG (السعر_ل)
من Table_Example
INTO: متوسط ​​السعر ؛
ل
حدد معرّف ، NAME ، PRICE_1
من Table_Example
INTO: المعرف ،: NAME ،: new_price
فعل
يبدأ
/ * هنا نقوم بمعالجة السجل الجلدي * /
إذا (new_pnce> avg_price) ثم / * يكون السعر الحالي أعلى بالنسبة لمتوسط ​​السعر * /
يبدأ
/ * ضع سعرًا جديدًا مساويًا لمتوسط ​​السعر بالإضافة إلى تحديد المئات * /
new_price = (avg_price + avg_price * (Percent2Increase / 100)) ؛
تحديث Table_example
ضبط PRICE_1 =: new_price
أين المعرف =: المعرف ؛
نهاية
آخر
يبدأ
/ * إذا كان السعر الفعلي أقل أو أكثر من متوسط ​​السعر ، فعندئذ أقوم بتعيين السعر المساوي للسعر الإجمالي ، بالإضافة إلى نصف سعر التجزئة بين المبلغ ومتوسط ​​السعر * /
new_price = (new_price + ((avg_price - new_price) / 2)) ؛
تحديث Table_example
ضبط PRICE_1 =: new_price
أين المعرف =: المعرف ؛
نهاية
تعليق؛
نهاية
نهاية

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

الإجراءات العودية المحفوظة

يمكن أن تكون إجراءات InterBase التي تم حفظها متكررة. تسي يعني أن الإجراءات التي تم حفظها ، يمكنك الاتصال بنفسك. يُسمح بما يصل إلى 1000 إجراء متساوٍ ، والتي يتم حفظها ، ومع ذلك ، عليك أن تتذكر أن الموارد المتاحة على الخادم قد تنفد في وقت مبكر ، وسيتم الوصول إلى الحد الأقصى لاستثمار HP.
تعد معالجة الهياكل الشبيهة بالشجرة التي يتم حفظها في قاعدة البيانات واحدة من أوسع نطاق من الإجراءات التي يتم حفظها. غالبًا ما يتم تقليب الأشجار في إدارة المستودعات والمستودعات والموظفين والإضافات الواسعة الأخرى.
دعنا نلقي نظرة على مثال الإجراء الذي تم اتخاذه ، وكيفية اختيار جميع السلع من نفس النوع ، بدءًا من الاستثمار الأول المتساوي.
اسمحوا لي أن أتطرق إلى بيان المهمة: هل يمكنني إحضار سلع بهيكل هرمي من هذا النوع:

بضائع
- تقنية بوبوتوف
- ثلاجات
- ثلاث غرف
- غرفتين
- غرفة واحدة
- ماكينات التنظيف
- رَأسِيّ
- أمامي
- كلاسيكي
- فوزكي
- تكنولوجيا الكمبيوتر
....

هيكل Tsya dovіdnika categorіy varіv_v قد الأم g_lki raznoї glibini. وتتراكم أيضًا بمرور الوقت. مهمتنا هي توفير مجموعة مختارة من جميع عناصر نهاية اليوم من "تلاوة الاسم الشائع" ، بدءًا من أي فوزلا. على سبيل المثال ، إذا اخترنا "سيارات Palny" ، فسنحتاج إلى مراعاة الفئات التالية:

ماكينات التحديق - عمودي
سيارات أمامية - أمامية كلاسيكية
سيارات أمامية - سيارات أمامية أعلى

هيكل الجداول مهم لجمع المعلومات حول تقدم البضائع. لقد قمت بتبسيط مخطط تنظيم شجرة في جدول واحد:

إنشاء شجرة السلع الجدول
(ID_GOOD INTEGER ليس فارغًا ،
ID_PARENT_GOOD INTEGER ،
GOOD_NAME VARCHAR (80) ،
قيد المفتاح الأساسي pkGooci (ID_GOOD)) ؛

نقوم بإنشاء جدول GoodsTree واحد ، حيث يوجد 3 حقول فقط: ID_GOOD - معرف فئة معقول ، ID_PARENT_GOOD - معرف للفئة المحددة و GOOD_NAME - اسم الفئة. لضمان سلامة البيانات لهذا الجدول ، قمنا بوضعه على الطاولة لتبادل مفتاح الاتصال:

تبديل البضائع الجدولشجرة
أضف القيد FK_goodstree
مفتاح خارجي (ID_PARENT_GOOD)
المراجع GOODSTPEE (ID_GOOD)

الجدول ذاتي الدعم ويجب اتباع نفس المفتاح القديم. schob at the table buv posilan على الآباء المجهولين ، і navіt reshkodzhaє حاول رؤية فئة البضائع ، yakі mayut nashchadki.
دعنا نطرحه على جدول البيانات القادمة لدينا:

ID_GOOD

1
2
3
4
5
6
7
8
9
10
11
12

ID_PARENT_GOOD

0
1
1
2
2
4
4
4
5
5
10
10

اسم جيد

بضائع
تقنية بوبوتوف
أجهزة الكمبيوتر وملحقاتها
ثلاجات
ماكينات التنظيف
تريشامبر
غرفتين
غرفة واحدة
رَأسِيّ
أمامي
فوزكي
كلاسيكي

الآن ، إذا كان لدينا مكان لجمع البيانات ، فيمكننا المضي قدمًا في إنشاء إجراء حفظ ، والذي سيشهد إزالة جميع فئات السلع "المتبقية" من الفئة "المطلقة" - على سبيل المثال ، للفئة "ثلاثة -حجرة "خارج الفئة ستبدو مثل" ثلاجات Pobutov tehnіka Trikamernі ".
لقد طورت الإجراءات التي تهتم بالبنى الشبيهة بالأشجار مصطلحاتها الخاصة. يسمى عنصر الجلد في الشجرة بالعقدة ؛ والبلوز بين العقدة ، المتجمعة واحدًا لواحد ، تسمى أحذية الرجل العجوز. تسمى Vuzli ، التي تقع في نهاية الشجرة ولا تصنع Naschadkiv ، "أوراق".
لكل إجراء يتم حفظه ، ستكون معلمة الإدخال هي معرف الفئة ، لسبب ما سنبدأ في الفرز. يتم حفظ إجراء matime على النحو التالي:

إنشاء إجراء GETFULLNAME (ID_GOOD2SHOW INTEGER)
العوائد (FULL_GOODS_NAME VARCHAR (1000) ،
ID_CHILD_GOOD INTEGER)
مثل
DECLARE VARIABLE CURR_CHILD_NAME VARCHAR (80) ،
يبدأ
/ * 0rgan_zuєmo zovnіshnіy دورة لـ SELECT لملصقات منتجات bezporednіmi مع ID_GOOD = ID_GOOD2SHOW * /
لـ SELECT gtl.id_good، gtl.good_name
من GoodsTree gtl
أين gtl.id_parent_good =: ID_good2show
INTO: ID_CHILD_GOOD،: full_goods_name
فعل
يبدأ
/ "التحقق من وجود دالة EXISTS إضافية ، لذا أدر TRUE ، كما لو كان الأمر سيستغرق صفًا واحدًا عند منعطف الذراعين. إذا كانت العقدة التي تم العثور عليها ID_PARENT_GOOD = ID_CHILD_GOOD لا تحتوي على اختصارات ، فهي" ورقة "من الشجرة ويتم استهلاكها نتيجة */
إذا (ليس خارجًا (
حدد * من GoodsTree
أين GoodsTree.id_parent_good =: id_child_good))
من ثم
يبدأ
/ * مرر قوس الشجرة إلى النتيجة * /
تعليق؛
نهاية
آخر
/ * للعقد ، مثل عمل الأربطة * /
يبدأ
//
CURR_CHILD_NAME = full_goods_name ؛
/ * تشغيل الإجراء الخاص بي بشكل متكرر * /
ل
حدد ID_CHILD_GOOD ، full_goods_name
من GETFULLNAME (: ID_CHILD_GOOD)
INTO: ID_CHILD_GOOD،: full_goods_name
ابدأ
/ * dodaєmo من أجل vuzla-daddy إلى الشخص المعروف. * /
full_goods_name = CURR_CHILD_NAME | "" | و ull_goods_name ، -
تعليق؛ / * تسليم البضائع * /
نهاية
نهاية
نهاية
نهاية

إذا استخدمنا هذا الإجراء مع ID_GOOD2SHOW = معلمة إدخال واحدة ، فسنأخذ ما يلي:

تمامًا مثل bachite ، للمساعدة في إجراء تكراري يتم حفظه ، مررنا بشجرة الفئات بأكملها وأخرجنا أسماء الفئات - "الأوراق" ، كما لو كانت على أطراف الإبر نفسها.

فيسنوفوك

في هذه المرحلة ، نختتم مراجعة الاحتمالات الرئيسية لإجراءاتي التي تم حفظها. من الواضح ، من أجل إتقان تقسيم الإجراءات المحفوظة عند استحالة قراءة قسم واحد ، حاولنا الكشف عن المفاهيم الأساسية المتعلقة بإجراءات التوفير وشرحها. يمكن العثور على أوصاف تصميم وتصميم HP في معظم قواعد البيانات
سيتم الكشف عن جزء من الطعام المهم ، المرتبط بتكلفة الإجراءات التي يتم توفيرها ، في القسم القادم - "توسيع إمكانية حفظ إجراءات InterBase" ، حيث يرتبط باللوم العام ، vir_ishennu لحالات العفو في الإجراءات التي يتم حفظها والروبوتات.

22 حلقة

معرفتي بالكتابة في برنامج WinForms Client / Server الرئيسي بسيطة ، وقد أتيت إليها:

إجراءات Vykoristovuvat التي يتم الاعتناء بها:

  • لكونك عامل آلي قابل للطي. إذا اخترت العمل ، فستحتاج بشكل فعال إلى مؤشر جدول أو مؤقت ، لذلك اتصل بأفضل طريقة لتشغيله في SQL Server.
  • قد تحتاج إلى منع الوصول إلى البيانات. إذا لم تمنح حق الوصول إلى طاولات coristuvachas (أو الأدوار أو أي شيء آخر) ، يمكنك أن تكون مقتنعًا بأن الطريقة الوحيدة للتفاعل معهم هي من خلال المشروع المشترك الذي تم إنشاؤه.

النصر للطلبات الخاصة:

  • بالنسبة لـ CRUD ، إذا لم تكن بحاجة إلى تشذير الوصول إلى البيانات (لأنك تحتاج إلى القيام بذلك بالطريقة الأخرى).
  • لأبسط النكات. إنشاء SP لمعايير غير شخصية لنكتة - هذا كل ما يمكن طيها في الخدمة. إذا كان بإمكانك إنشاء طلب وكزة سويدي ، فغمز به.

بالنسبة لمعظم الإضافات الخاصة بي ، فزت مثل SP ، لذا فإن SQL المخصص لذلك ، أريد أن أعرف أن لديّ نائب أقل وأقل SP ، شظايا الرائحة الكريهة في حقيبة النهاية برمز مثل C # ، فقط المزيد من التحكم والاختبار و يحسن. أوصي باستخدام sql المخصص ثنائي الأسلاك لأنك لا تعرف السبب المحدد.

إجراءات التوفير - عقد على برنامج أمان ، يتم تضمينها ، يعيش مقابل قواعد البيانات. يمكن تغيير رمز الإجراءات والمخطط ذاته لقاعدة البيانات دون تجميع الكود وتطويره ، وبالتالي تُترك مدخلات الإجراء دون تغيير.

عندما تسأل برنامجك ، ستخبر نفسك بوضوح عن نموذج البيانات الخاص بك.

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

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

كشخص لديه بيانات ، لم ألقي نظرة على العمل وراء قاعدة البيانات ، قبل أن يمروا بطلبات مخصصة ، لذلك من المهم بالنسبة لهم أن يتعلموا أو يهتموا بشكل فعال. كيف يمكنني معرفة ما يمكنني المساهمة به في تغيير المخططات؟ بالإضافة إلى ذلك ، لا أعتقد أنه يجب منح coristovats وصولاً مباشرًا إلى جداول قاعدة البيانات بأمان انعكاس (ولا يمكنني مهاجمة حقن SQL فقط ، ولكن أيضًا حقيقة أن التحكم الداخلي الأساسي ، الذي لا يسمح بالحقوق المباشرة و vimagaє vіd usіh koristuvachіv vikoristovyte فقط procs ، المعترف بها للبرنامج ، schob zapobіgti mozhlivogo shahraystvo.

قواعد البيانات موجهة للكائنات ، ويمكن تدمير الكود الذي يبدو جيدًا من وجهة نظر موجهة للكائنات تمامًا من وجهة نظر البيانات الأساسية.

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

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

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

ابدأ دائمًا من ملف .sql ، وهو جوهر إجراء الحفظ. انشر yogo في keruvannya بالإصدارات بعد كتابة الكود. في المرة القادمة ، إذا كنت ترغب في تعديل الإجراء الخاص بك ، فما تم حفظه ، فسوف تزيل عنصر التحكم الخارجي الخاص بك ، أسفل قاعدة البيانات الخاصة بك. إذا اتبعت هذا ، فستحصل على نفس الإدارة الجيدة مثل التعليمات البرمجية الخاصة بك.

أود أن أقتبس من Tom Kyte من Oracle هنا ... هذه هي القاعدة المتعلقة بكتابة التعليمات البرمجية ... حتى لو كانت غير متطابقة بعض الشيء ، لكنني أعلم بشكل أفضل ، على ما أعتقد.

يحتوي الملحق الخاص بنا على كرة من التعليمات البرمجية ، والتي يمكننا استخدامها للسؤال (وفي بعض الأحيان نحتاج إلى إجراء يتم حفظه). تسمح لنا Tse بما يلي:

  • بسهولة otrimat كل طلب نسخ keruvannya ساعة
  • robiti جميع التغييرات للعناية بالبشرة لخوادم قواعد البيانات المختلفة
  • يتضمن تكرار نفس الكود من خلال الكود الخاص بنا

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

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

حجة أن الإجراءات التي تم حفظها أكثر فعالية ، لا تنتقم بعد الآن. تم إرسال النص

ستُظهر لك نصيحة Google بشأن الإجراء الذي يتم اتخاذه مقابل Dynamic Query بعض الحجج في أي حال ، ومن الأفضل لك قبول قرارك الخاص.

Deyakі rechі ، حول yaki ، من الضروري التفكير: من يحتاج إلى إجراءات ، وما الذي يدخرونه ، على أي حال؟

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

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

إذا كنت تريد أن تسأل بشكل خاص ، فغيّر رأيك في أنها محددة

معلمات SQL أو SPROC ... لا تهم كثيرًا من حيث الأداء ... يمكنك طلب تحسين أحدهما.

بالنسبة لي ، تتمثل بقية ميزة SPROC في أنه يمكنني إيقاف الكثير من الحقوق لإدارة حقوق SQL ، فقط امنح حقوقي لتسجيل الدخول إلى sprocs ... حتى تتمكن من الفوز بـ SQL Parametized ، وتسجيل الدخول ، والربط بصف الاتصال الخاص بك ، ربما أكثر (سجل من أي نوع من العوامل للاختيار من بينها في أحد الجداول التي يمكنهم الوصول إليها ، على سبيل المثال).

كما في السابق ، كنت أفضّل SQL ذات المعلمات ، وأرغب في ...

حجة الإنتاجية sproc є spirnim - 3 RDBMs العليا تستعيد خطة الشرب وساعات العمل اليومية. تم توثيق يوجو ... ما هو عام 1995 حتى الآن؟

ومع ذلك ، فإن تنفيذ SQL في برنامجك يعد أيضًا تصميمًا رديئًا - صيانة التعليمات البرمجية ، وربما لا يكون مفهومًا جيدًا بما يكفي للأثرياء.

وبالمثل ، يمكن أن يبدأ البرنامج من نقطة الصفر للحصول على ORM إضافي (إضافات من الحقل الأخضر بعيدًا عن kіlkoh!) ، tse vіdminny vibrіr ، نموذج oskіlki لفصلك keruє نموذج DB الخاص بك لمدة ساعة فقط.

نظرًا لعدم توفر بنية ORM ، فقد اخترقنا ملف pidhide مختلطًا لإنشاء ملف XML لموارد SQL لسؤال صف من SQL عن الضرورة (ثم يتم تخزين الرائحة الكريهة مؤقتًا بواسطة البنية التحتية للموارد). تمامًا كما سيتطلب SQL بعض المعالجات الطفيفة التي تختلف عن الكود ، فإنه سيتطلب أيضًا معالجة كبيرة لصف من SQL ، وهو ما نعيد التفكير فيه.

هذا الطفل الهجين أسهل في إدارة تجار التجزئة (ربما ، فريقي أصغر ، يمكن لفريقي القيام بذلك بشكل صحيح ، حتى أتمكن من قراءة خطة الطلب) ، والحنجرة هي مجرد إعادة التحقق من SVN. بالإضافة إلى ذلك ، سأطلب منك تبديل RDBM - فقط استبدل ملف موارد SQL (ليس بهذه البساطة كأداة ORM ، بالطبع ، لكنه يعمل مع الأنظمة القديمة أو قاعدة البيانات ، وهي غير مدعومة)

رأيي أن 90٪ من الطلبات و / أو الإجراءات المحفوظة ليست مسؤولة عن تحديد موعد (مقبول يدويًا).

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

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

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

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

إجراء الصوت

إنشاء الإجراء [({في | خارج | INOUT} [,…])]
[مجموعة النتائج الديناميكية ]
يبدأ [الذري]

نهاية

الكلمات الدالة
. IN (الإدخال) - معلمة الإدخال
. OUT (الإخراج) - معلمة الإخراج
. INOUT - المدخلات والمخرجات ، وكذلك حقل (بدون معلمات)
. تشير DYNAMIC RESULT SET إلى أن الإجراء يمكنه تحديد عدد المؤشرات ، بحيث يمكن إغلاق الإجراء بعد إرجاع الإجراء.

ملاحظات
لا يوصى بتغيير الكثير من المعلمات في الإجراءات المحفوظة (على سبيل المثال ، أمام أعداد كبيرة وسلاسل أحرف) من خلال إعادة إنشاء المكدس. من الناحية العملية ، في اللهجات الأساسية لـ Transact-SQL و PL / SQL و Informix ، من الممكن الحفاظ على الاتساق مع المعيار ، كما هو الحال في المعلمات الصوتية والمختلفة ، والتغييرات الصوتية ، والبرنامج سهل الاستخدام. توصي Microsoft بإيقاف التقريب التالي لتقييم حجم ذاكرة التخزين المؤقت للإجراءات التي تم حفظها:
\ u003d (أقصى عدد ساعات عمل coristuvachiv) * (تجربة أكبر خطة حضور) * 1.25. اعتمادًا على الخطة ، يمكن توسيع الجوانب بمساعدة الأمر: DBCC MEMUSAGE.

إجراءات فيكليك

بالنسبة إلى نظم إدارة قواعد البيانات الغنية ، يتم استخدام قائمة الإجراءات المحفوظة لمساعدة المشغل:

إجراء التنفيذ [(][)]

ملحوظة: يمكن حفظ الإجراءات بسرعة مع البرامج أو الإجراءات الأخرى التي يمكن حفظها أو في الوضع التفاعلي.

مثال على إجراء التصويت

إنشاء إجراء Proc1 AS // صاعق الإجراء
إعلان Cur1200 // صاعقة المؤشر
افتح Cur1 // افتح المؤشر
إحضار التالي من Cur1 // قراءة البيانات من المؤشر
بينماFetch_Status = 0
يبدأ
إحضار التالي من Cur1
نهاية
CLOSE Cur1 // أغلق المؤشر
تحديد Cur1
EXECUTE Proc1 // قم بتشغيل الإجراء

تعدد الأشكال
يمكن إنشاء برنامجين فرعيين بنفس الاسم في مخطط واحد ونفسه ، حيث توجد معلمات هذين البرنامجين الفرعيين في هذا العالم من نوع واحد ، بحيث يمكن فصلهما. للتمييز بين برنامجين فرعيين لهما نفس الأسماء في مخطط واحد ، يتم إعطاء الجلد اسمًا بديلاً وفريدًا (اسم محدد). يمكن تعيين هذه الإيمية ، إذا تم تطوير برنامج فرعي. عند استدعاء برنامج فرعي لوجود عدد من نفس الأسماء ، يتم احتساب تكلفة البرامج الفرعية المطلوبة لفترة زمنية قصيرة:
. في كثير من الأحيان ، يتم تعيين جميع الإجراءات من الأسماء المخصصة ، وإذا لم يكن هناك مثل هذا ، فإن جميع الوظائف من أسماء معينة.
. للحصول على تحليل أعمق ، تم التخلي عن هذه البرامج الفرعية ، ويمكن منح امتياز لمئات من هؤلاء الأشخاص لـ vikonannya (EXECUTE).
. يتم تحديد Їх ті ، حيث يتم تحديد عدد المعلمات من خلال عدد الوسائط في الاستعلام. يتم مراجعة أنواع البيانات والمعلمات المخصصة لتلك الوظائف.
. إذا تم ترك أكثر من برنامج فرعي واحد ، فسيتم اختيار البرنامج الذي يحتوي على أقصر مؤهل.
في ممارسة Oracle ، يُسمح بتعدد الأشكال للوظائف التي يتم عرضها فقط في الحزم ، [بريد إلكتروني محمي]- في المخططات الأخرى ، وفي Sybase و MS SQL Server ، يتم حظر التركيز.

فيدالينيا وتغيير الإجراءات
بالنسبة للإجراء البعيد ، يتم استخدام عامل التشغيل:

لتغيير الإجراء ، تم تحديد عامل التشغيل:

تغيير الإجراء [([{في | خارج | INOUT}])]
يبدأ [الذري]

نهاية

امتيازات إجراءات vikonannya

تشغيل المنحة ل |عام [مع خيار المنحة]

إجراءات النظام
قد يكون لنظام DBMS الثري (بما في ذلك SQL Server) نفس مجموعة إجراءات النظام ، لذا يمكنك تعديلها لأغراضك الخاصة.