زنگ.

کسانی هستند که این خبر را قبل از شما خوانده اند.
مشترک شدن برای دریافت مقالات تازه.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه

اخرین بروزرسانی: 14.08.2017

اغلب عملیات داده ها مجموعه ای از دستورالعمل هایی را ارائه می دهد که باید در یک دنباله خاص انجام شود. به عنوان مثال، هنگام اضافه کردن خرید کالا، شما باید داده ها را در جدول سفارشات انجام دهید. با این حال، قبل از این لازم است بررسی شود، و اینکه آیا یک محصول خریداری شده در انبار وجود دارد. شاید برای بررسی تعداد دیگری از شرایط اضافی لازم باشد. این، در واقع، فرایند خرید کالاها چندین اقدام را پوشش می دهد که باید در یک دنباله خاص انجام شود. و در این مورد، آن را به طور مطلوب به طور مطلوب تمام این اقدامات را در یک شیء قرار دهید - روش ذخیره شده روش ذخیره شده)

به این معناست که اساسا روش های ذخیره شده مجموعه ای از دستورالعمل هایی را ارائه می دهند که به عنوان یک عدد صحیح انجام می شود. بنابراین، روش های ذخیره شده امکان ساده سازی عملیات جامع را فراهم می کند و آنها را به یک شیء واحد می برد. فرآیند خرید کالاها به ترتیب تغییر خواهد کرد، به اندازه کافی برای تغییر کد روش کافی خواهد بود. به این ترتیب، این روش همچنین کد مدیریت را ساده می کند.

همچنین روش های ذخیره شده به شما این امکان را می دهد که دسترسی به داده ها را در جداول محدود کنید و به این ترتیب احتمال ابتلا به اقدامات ناخواسته عمدی یا ناخودآگاه را برای این داده ها کاهش دهید.

و یکی دیگر از جنبه های مهم - عملکرد. روش های ذخیره شده معمولا سریعتر از دستورالعمل های منظم SQL انجام می شود. همه به این دلیل که کد روش یک بار در اولین بار تکمیل می شود و سپس در فرم کامپایل شده ادامه یافت.

برای ایجاد یک روش ذخیره شده، روش ایجاد یا ایجاد دستور proc استفاده می شود.

بنابراین، روش ذخیره شده سه است ویژگی های کلیدی: ساده سازی کد، امنیت و عملکرد.

به عنوان مثال، اجازه دهید پایگاه داده یک جدول داشته باشد که داده ها را در مورد محصولات ذخیره می کند:

ایجاد محصولات جدول (ID INT Intentity Key اصلی، Productname Nvarchar (30) null، تولید کننده nvarchar (20) NOL null، Productcount int پیش فرض 0، قیمت پول null)؛

ایجاد یک روش ذخیره شده برای استخراج داده ها از این جدول:

استفاده از productsDB؛ برو ایجاد Productsummary به عنوان انتخاب محصول به عنوان محصول، تولید کننده، قیمت از محصولات

از آنجا که تیم ایجاد شده باید نامیده شود بسته جداگانه، پس از دستور استفاده، که پایگاه داده فعلی را تنظیم می کند، از دستور GO برای تعیین بسته جدید استفاده کنید.

پس از نام این روش باید برود کلمه کلیدی مانند.

برای جدا کردن بدن از روش از بقیه اسکریپت، کد روش اغلب در شروع آغاز می شود ... واحد پایان:

استفاده از productsDB؛ GO ایجاد روش Productsummary به عنوان شروع انتخاب محصول به عنوان محصول، تولید کننده، قیمت از محصولات پایان؛

پس از اضافه کردن روش، ما می توانیم آن را در گره پایگاه داده در SQL Server مدیریت استودیو در Subselle ببینید برنامه نویسی -\u003e روش های ذخیره شده:

و ما قادر خواهیم بود که این روش را از طریق رابط بصری مدیریت کنیم.

روش

برای اجرای روش ذخیره شده، دستور EXEC یا EXECUTE نامیده می شود:

exec productsummary

حذف روش

دستور Drop Commandure اعمال می شود تا روش را حذف کند:

روش قطره Productsummary.

  1. بررسی اپراتورهای توصیف روش های ذخیره شده و اصول انتقال پارامترهای ورودی و خروجی خود را بررسی کنید.
  2. روش برای ایجاد و اشکال زدایی روش های ذخیره شده در سرور MS SQL Server 2000 را بررسی کنید.
  3. پنج روش اساسی ذخیره شده را توسعه دهید پایه علمی داده "کتابخانه".
  4. یک گزارش را در مورد کار انجام شده در فرم الکترونیکی آماده کنید.

1. اطلاعات عمومی در مورد روش های ذخیره شده

روش ذخیره شده (روش ذخیره شده) - این مجموعه ای از دستورات، ذخیره شده بر روی سرور است و به طور کلی اجرا می شود. روش های ذخیره شده مکانیسم ای است که شما می توانید زیرمجموعه هایی را که بر روی سرور اجرا می شود ایجاد کنید و توسط فرآیندهای آن کنترل شود. چنین زیرمجموعه ها را می توان با استفاده از درخواست آنها فعال کرد. علاوه بر این، آنها می توانند ناشی از قوانین باشند که از یکپارچگی داده ها پشتیبانی می کنند یا باعث می شود.

روشهای ذخیره شده می توانند مقادیر را بازگردانند. در این مراحل، شما می توانید مقادیر وارد شده کاربر را با مجموعه اطلاعات پیش از سیستم مقایسه کنید. روش های ذخیره شده در بهره برداری از راه حل های سخت افزاری SQL Server قدرتمند استفاده می شود. آنها بر اساس پایگاه های داده ها هستند و با بهینه ساز SQL Server ارتباط برقرار می کنند. این به شما اجازه می دهد تا در طول پردازش داده ها عملکرد بالا دریافت کنید.

در روش های ذخیره شده، ممکن است ارزش ها را انتقال دهید و از نتایج کار آنها را بدست آورید و نه لزوما مربوط به جدول کاری نیست. روش ذخیره شده می تواند نتایج را در طول عملیات محاسبه کند.

روش های ذخیره شده دو نوع هستند: طبیعی و تمدید شده. رویه های متعارف ذخیره شده مجموعه ای از دستورات در مورد Transact-SQL هستند، در حالی که روش های ذخیره شده ذخیره شده به عنوان کتابخانه های پویا (DLL) ارائه شده است. چنین رویه ها، در مقایسه با معمول، پیشوند XP_ دارند. سرور دارای مجموعه ای استاندارد از روش های پیشرفته است، اما کاربران می توانند روش های خود را در هر زبان برنامه نویسی بنویسند. نکته اصلی این است که از رابط برنامه نویسی استفاده کنید sql سرور باز API خدمات داده. روش های ذخیره شده ذخیره شده تنها می تواند در پایگاه داده اصلی باشد.

روشهای ذخیره شده متعارف نیز می تواند به دو نوع تقسیم شود: وابسته به سیستمیک و سفارشی. روش های سیستم - این است روش های استانداردخدمت به عملیات سرور؛ سفارشی - هر روش ایجاد شده توسط کاربر.

1.1. مزایای استفاده از روش های ذخیره شده

در موارد کلی، روش های ذخیره شده مزایای زیر را دارند:

  • عملکرد بالا این نتیجه محل روش های ذخیره شده در سرور است. سرور معمولا یک دستگاه قدرتمندتر است، بنابراین زمان اجرای روش بر روی سرور به طور قابل توجهی کمتر از آن است ایستگاه کاری. علاوه بر این، اطلاعات از پایگاه داده و روش ذخیره شده در همان سیستم قرار دارد، بنابراین انتقال سوابق بر روی شبکه عملا صرف نمی شود. روش های ذخیره شده دسترسی مستقیم به پایگاه های داده، که باعث می شود با اطلاعات بسیار سریع کار کند.
  • مزیت توسعه سیستم در معماری سرویس گیرنده سرور. این امکان به طور جداگانه ایجاد یک نرم افزار و سرور مشتری است. این مزیت کلیدی در توسعه است و به لطف آن شما می توانید زمان لازم برای پایان پروژه را به طور قابل توجهی کاهش دهید. کد در حال اجرا بر روی سرور می تواند به طور جداگانه از کد بخش مشتری توسعه داده شود. در این مورد، اجزای بخش سرور را می توان توسط اجزای طرف مشتری به اشتراک گذاشت.
  • سطح امنیتی روش های ذخیره شده می تواند به عنوان یک ابزار بهبود امنیت عمل کند. شما می توانید رویه های ذخیره شده ایجاد کنید که عملیات اضافه کردن، تغییر، حذف و نمایش لیست ها را انجام می دهند و بنابراین کنترل هر یک از جنبه های دسترسی به اطلاعات را به دست می آورند.
  • تقویت قوانین سرور کار با داده ها. این یکی از مهمترین علل استفاده از هسته پایگاه داده هوشمند است. روش های ذخیره شده به شما این امکان را می دهد که قوانین و منطق دیگری را اعمال کنید که به کنترل اطلاعاتی که به سیستم فعال می شود، کمک می کند.

با اينكه زبان SQL این به عنوان یک سرور غیر مجاز تعریف شده است، SQL Server از کلمات کلیدی مربوط به مدیریت اجرای روش استفاده می کند. چنین کلمات کلیدی هنگام ایجاد رویه هایی که می توانند برای اعدام بعدی ذخیره شوند استفاده می شود. روش های ذخیره شده را می توان به جای برنامه های ایجاد شده استفاده کرد زبان های استاندارد برنامه نویسی (به عنوان مثال، با یا ویژوال بیسیک) و انجام عملیات در پایگاه داده داده های SQL سرور

روشهای ذخیره شده در اولین اجرای کامپایل شده و در جدول سیستم پایگاه داده فعلی ذخیره می شوند. هنگام کامپایل، آنها بهینه شده اند. در این مورد، بهترین راه برای دسترسی به اطلاعات جدول انتخاب شده است. چنین بهینه سازی موقعیت واقعی داده ها را در جدول، شاخص های موجود، بار جدول، و غیره را در نظر می گیرد.

روشهای ذخیره شده جمع آوری شده می تواند به طور قابل توجهی بهبود عملکرد سیستم را بهبود بخشد. با این حال، ارزشش را دارد، با این حال، شایان ذکر است که آمار داده ها از لحظه ایجاد این روش تا زمانی که اعدام آن ممکن است منسوخ شود، و شاخص ها می توانند بی اثر شوند. و اگرچه شما می توانید آمار را ارتقا دهید و شاخص های جدید و کارآمدتر را اضافه کنید، طرح اجرای روش قبلا کامپایل شده است، یعنی این روش کامپایل شده است، و در نتیجه، روش دسترسی به داده ها می تواند موثر باشد. بنابراین، این امکان وجود دارد که رویه ها را با هر تماس بگیرید.

از سوی دیگر، بازپرداخت هر بار طول می کشد. بنابراین، مسئله اثربخشی بازپرداخت روش یا تلفیق یک بار پیاده سازی آن کاملا ظریف است و باید برای هر مورد خاص به طور جداگانه مورد توجه قرار گیرد.

روش های ذخیره شده را می توان در یک دستگاه محلی یا در یک سیستم SQL Server از راه دور انجام داد. این باعث می شود که فرایندها را بر روی ماشین های دیگر فعال کنید و نه تنها با پایگاه داده های محلی، بلکه همچنین با اطلاعات در مورد سرورهای مختلف کار کنید.

برنامه های کاربردی نوشته شده در یکی از زبان های سطح بالا، مانند با یا ویژوال بیسیک دات نت، همچنین می تواند روش های ذخیره شده را نیز ایجاد کند که تضمین می کند راه حل بهینه در توزیع بار بین نرم افزار بخش مشتری و SQL Server.

1.2 ایجاد روش های ذخیره شده

ایجاد دستورالعمل دستورالعمل برای ایجاد یک روش ذخیره شده اعمال می شود. نام روش ذخیره شده می تواند تا 128 کاراکتر طول داشته باشد، از جمله نمادها # و ##. نحو تعریف روش:

کیفیت نام را ایجاد کنید [؛ عدد]
[(@ parameter type_data) [\u003d value___uomolement]]] [، ... n]

مانند
<Инструкции_SQL>

پارامترهای این دستور را در نظر بگیرید:

  • نام: Procedure_name - نام روش؛ باید قوانین شناسه را برآورده کند: طول آن نمی تواند بیش از 128 کاراکتر باشد؛ برای روش های محلی محلی، نام قبل از نام، و برای روش های موقت جهانی استفاده می شود - نشانه ها ##؛
  • این عدد یک عدد صحیح اختیاری است که برای گروه بندی چندین روش تحت یک نام استفاده می شود؛
  • @ Parameter type_data - لیستی از نام پارامتر روش نشان دهنده نوع داده مناسب برای هر یک؛ چنین پارامترها می تواند تا 2100 باشد. مقدار پارامتر مجاز به انتقال صفر است. تمام انواع داده ها را می توان به استثنای متن، ntext و انواع تصویر استفاده کرد. شما می توانید نوع داده های مکان نما را به عنوان پارامتر خروجی (خروجی کلمه کلیدی یا تغییر) استفاده کنید. پارامترهای داده های مکان نما می توانند تنها پارامترهای خروجی باشند؛
  • تغییر یک کلمه کلیدی است که تعیین می کند که پارامتر حاصل از آن به عنوان پارامتر نتیجه استفاده می شود (فقط برای نوع مکان نما استفاده می شود)؛
  • خروجی - پیشنهاد می کند که پارامتر مشخص شده را می توان به عنوان یک خروجی استفاده کرد.
  • value_to_ux - مورد استفاده در مورد زمانی که تماس با روش، پارامتر از دست رفته؛ باید ثابت باشد و ممکن است شامل کاراکترهای ماسک (٪، _، [،]، ^) و ارزش صفر ;
  • با recompile - کلمات کلیدی نشان می دهد که SQL Server برنامه روش را در حافظه پنهان ثبت نمی کند و هر بار که اجرا می شود، آن را ایجاد می کند؛
  • با رمزگذاری - کلمات کلیدی نشان می دهد که SQL Server این روش را قبل از نوشتن به جدول سیستم SysComments رمزگذاری می کند. به منظور متن از روش های رمزگذاری شده برای بازگرداندن، لازم است که کورتیک ها را از جداول Syscomments مربوط به آنها پس از رمزگذاری حذف کنید؛
  • برای تکرار - کلمات کلیدی نشان می دهد که این روش فقط برای تکرار ایجاد می شود. این گزینه با کلمات کلیدی با بازپرداخت ناسازگار است؛
  • به عنوان - آغاز تعریف متن روش؛
  • <Инструкции_SQL> - تنظیم دستورالعمل های مجاز SQL، تنها با حداکثر اندازه روش ذخیره شده محدود شده است - 128 کیلوبایت. نامعتبر اپراتورهای زیر هستند: تغییر پایگاه داده، روش تغییر، تغییر جدول، ایجاد پیش فرض، ایجاد روش، تغییر مسیر، ایجاد پایگاه داده، ایجاد قانون، ایجاد طرح، ایجاد ماشه، ایجاد دیجیتال، دیسک تغییر اندازه، دیسک تغییر دهید ، قطره به طور پیش فرض، روش رها کردن، کاهش قانون، رها کردن ماشه، Drop Trigger، Drop View، Resotre پایگاه داده، بازگرداندن ورود، تنظیم مجدد، آمار به روز رسانی.

یک نمونه از روش ذخیره شده را در نظر بگیرید. ما یک روش ذخیره شده را توسعه خواهیم داد که تعداد کپی کتاب هایی را که در حال حاضر در کتابخانه هستند، نمایش می دهد:

ایجاد روش count_ex1.
- روش شمارش تعداد نسخه های کتاب
- در حال حاضر در کتابخانه،
- نه بر روی خوانندگان دست
مانند
- متغیر محلی موقت را تنظیم کنید
اعلام int int
s را انتخاب کنید n \u003d count (*) از نمونه ای که yes_no \u003d "1"
s را انتخاب کنید
برو

از آنجا که روش ذخیره شده یک مولفه پایگاه داده کامل است، چگونه شما قبلا درک کرده اید، می توانید یک روش جدید برای پایگاه داده فعلی ایجاد کنید. هنگام کار در تجزیه و تحلیل پرس و جو SQL Server، تنظیم پایگاه داده فعلی با استفاده از اپراتور استفاده می شود، به دنبال آن نام پایگاه داده که در آن روش ذخیره شده باید ایجاد شود. همچنین پایگاه داده فعلی را نیز می توانید با استفاده از لیست کشویی استفاده کنید.

پس از ایجاد در سیستم ذخیره شده روش های SQL سرور آن را کامپایل می کند و زیرمجموعه های اجرایی را بررسی می کند. اگر هر گونه مشکلی رخ دهد، روش رد می شود. قبل از پخش مجدد، خطا باید حذف شود.

SQL Server 2000 از نامگذاری شده به نام نامگذاری شده به نام نامگذاری شده استفاده می کند.

اگر سیستم را با یک روش ذخیره نشده نامشخص بگذارید، در حالی که سعی می کنید آن را اجرا کنید، کاربر یک پیام خطا دریافت می کند.

شما همچنین می توانید یک روش ذخیره شده را با استفاده از SQL Server Enterprise Manager ایجاد کنید:

به منظور بررسی عملکرد روش ذخیره شده ذخیره شده، شما باید به تجزیه و تحلیل پرس و جو بروید و روش را برای اجرای اپراتور اجرا کنید exec<имя процедуры> . نتایج راه اندازی روش های ایجاد شده توسط ما در شکل ها ارائه شده است. چهار.

شکل. 4. اجرای روش ذخیره شده در تجزیه و تحلیل پرس و جو

شکل. 5. نتیجه روش بدون اپراتور خروجی بر روی صفحه نمایش

1.3. پارامترهای روش های ذخیره شده

روش های ذخیره شده یک ابزار بسیار قدرتمند هستند، اما حداکثر کارایی را می توان تنها با ایجاد پویا به دست آورد. توسعه دهنده باید بتواند مقدار را به روش ذخیره شده انتقال دهد که با آن کار خواهد کرد، یعنی پارامترها. در زیر اصول اساسی استفاده از پارامترها در روش های ذخیره شده است.

  • برای این روش، می توانید یک یا چند پارامتر را تعریف کنید.
  • پارامترها به عنوان مکان های ذخیره سازی نامیده می شود، درست مانند متغیرها در زبان های برنامه نویسی مانند C، Visual Basic .NET.
  • نام پارامتر لزوما پیش از نماد @ است.
  • نام پارامتر محلی در این روش است که آنها تعریف می شوند.
  • پارامترها برای انتقال روش اطلاعات هنگام اجرای آن خدمت می کنند. آنها پس از نام روش، با خط فرمان دخالت خواهند کرد.
  • اگر این روش دارای پارامترهای متعددی باشد، آنها توسط کاما جدا می شوند.
  • برای تعیین نوع اطلاعات منتقل شده به عنوان یک پارامتر، از سیستماتیک استفاده کنید انواع سفارشی داده ها.

در زیر تعریف یک روش دارای یک پارامتر ورودی است. وظیفه قبلی را تغییر دهید و ما تمام نسخه های کتاب را نمی پذیریم، بلکه تنها نمونه هایی از یک کتاب خاص است. این کتاب ها قطعا توسط ISBN منحصر به فرد شناسایی می شوند، بنابراین ما این پارامتر را به روش انتقال می دهیم. در این مورد، متن روش ذخیره شده تغییر خواهد کرد و فرم زیر را دارد:

ایجاد روش count_ex (insbn varchar (14))
مانند
اعلام int int
s را انتخاب کنید
برو

هنگامی که این روش را شروع می کنید، باید مقدار پارامتر ورودی را انتقال دهیم (شکل 6).

شکل. 6. اجرای روش با انتقال پارامتر

برای ایجاد نسخه های متعدد از همان روش که دارای همان نام هستند، نام اصلی را دنبال کنید تا یک semicolon و یک عدد صحیح قرار دهید. نحوه انجام این کار در مثال زیر نشان داده شده است، جایی که ایجاد دو روش با همان نام شرح داده شده است، اما با شماره های مختلف نسخه (1 و 2). این شماره برای کنترل نسخه این روش استفاده می شود. اگر شماره نسخه مشخص نشده باشد، اولین نسخه از روش انجام می شود. این گزینه در مثال قبلی نشان داده نشده است، اما، با این وجود، برای درخواست شما در دسترس است.

برای نمایش یک پیام شناسایی نسخه، هر دو روش دستورالعمل چاپ را اعمال می کنند. نسخه اول تعداد نمونه های آزاد را در نظر می گیرد و دوم تعداد نسخه های دست برای این کتاب است.

متن هر دو نسخه از روش های زیر است:

CREATURE COUNTCE_EX_ALL؛ یک
(insbn varchar (14))
- روش شمارش نسخه های رایگان کتاب داده شده
مانند
اعلام int int
را انتخاب کنید n \u003d count (*) از نمونه ای که iSBN \u003d bisbn و yes_no \u003d "1"
s را انتخاب کنید
--
برو
--
CREATURE COUNTCE_EX_ALL؛ 2
(insbn varchar (14))
- روش شمارش نسخه های رایگان کتاب داده شده
مانند
اعلام @ n1 int
@ n1 \u003d count (*) از نمونه ای که iSBN \u003d bisbn و yes_no \u003d "0" را انتخاب کنید
@ n1 را انتخاب کنید.
برو

نتایج حاصل از روش با نسخه های مختلف در شکل نشان داده شده است. 7

شکل. 7. نتایج را اجرا کنید نسخه های مختلف همان و روش مشابه ذخیره شده

هنگام نوشتن نسخه های چندگانه، باید محدودیت های زیر را به یاد داشته باشید: از آنجا که تمام نسخه های این روش با هم جمع می شوند، تمام متغیرهای محلی رایج هستند. بنابراین، اگر از طریق الگوریتم پردازش مورد نیاز است، باید از نام های مختلف متغیرهای داخلی استفاده کنید، که ما انجام داده ایم، فراخوانی متغیر N را در روش دوم توسط n1 استفاده می کنیم.

ما این روش ها را نوشته ایم، هیچ پارامتر را باز نمی گردانم، آنها به سادگی شماره نتیجه را نمایش می دهند. با این حال، اغلب ما باید یک پارامتر برای پردازش بیشتر دریافت کنیم. چندین راه برای بازگشت پارامترها از روش ذخیره شده وجود دارد. ساده ترین استفاده از مقادیر بازگشتی اپراتور بازگشت است. این اپراتور به شما این امکان را می دهد که یک مقدار عددی را بازگردانید. اما ما باید نام متغیر یا بیان را مشخص کنیم که به پارامتر بازگشتی اختصاص داده شده است. موارد زیر مقادیر بازگشتی توسط اپراتور بازگشتی، که توسط سیستم ذخیره می شود، است:

کد مقدار
0 همه چیز خوب است
-1 جسم یافت نشد
-2 خطای نوع داده
-3 این فرایند قربانی "Deadlock" بود
-4 خطای دسترسی
-5 اشتباه نوشتاری
-6 برخی از خطا
-7 خطا با منابع (بدون مکان)
-8 یک خطای داخلی اصلاح شده وجود داشت
-9 محدودیت سیستم خسته شده است
-10 نقض نادرست یکپارچگی داخلی
-11 یکسان
-12 تخریب یک جدول یا شاخص
-13 تخریب پایگاه داده
-14 خطای تجهیزات

بنابراین به تناقض با سیستم، ما می توانیم تنها تعداد کل مثبت را از طریق این پارامتر بازگردانیم.

به عنوان مثال، ما می توانیم متن قبلا نوشته شده COUNT_EX را تغییر دهیم به شرح زیر است:

ایجاد روش count_ex2 (insbn varchar (14))
مانند
اعلام int int
n \u003d count (*) از نمونه را انتخاب کنید
جایی که isbn \u003d bisbn و yes_no \u003d "1"
- ارزش متغیر n را بازگردانید
- اگر مقدار متغیر تعریف نشده باشد، بازگشت 0
بازگشت coalesce (n، 0)
برو

حالا ما می توانیم مقدار متغیر n را دریافت کنیم و از آن برای پردازش بیشتر استفاده کنیم. در این مورد، مقدار بازگشتی به روش ذخیره شده ترین اختصاص داده شده است، و به منظور تجزیه و تحلیل آن، می توانید از فرمت بیانیه تماس زیر از روش ذخیره شده استفاده کنید:

exec<переменная> = <имя_процедуры> <значение_входных_параметров>

یک مثال از فراخوانی روش ما در شکل نشان داده شده است. هشت

شکل. 8. انتقال مقدار بازگشتی از روش ذخیره شده از متغیر محلی

پارامترهای ورودی روش های ذخیره شده می توانند از مقدار پیش فرض استفاده کنند. این مقدار مورد استفاده قرار می گیرد اگر مقدار پارامتر هنگام تماس با روش مشخص نشده باشد.

مقدار پیش فرض از طریق علامت برابر پس از توصیف پارامتر ورودی و نوع آن تنظیم می شود. روش ذخیره شده را در نظر بگیرید، که تعداد نسخه های کتاب های سال مشخص را در نظر می گیرد. سال توسعه به طور پیش فرض - 2006.

ایجاد روش ex_books_now (year int \u003d 2006)
- شمارش تعداد کپی کتاب های سال مشخص شده
مانند
declareN_books int
s را انتخاب کنید n_books \u003d تعداد (*) از کتاب ها، نمونه
جایی که books.isbn \u003d Exemplar.isbn و yearizd \u003d year
بازگشت coalesce (n_books، 0)
برو

در شکل 9 نمونه ای از فراخوانی این روش را نشان می دهد، نشان دهنده پارامتر ورودی و بدون آن است.

شکل. 9. تماس با روش ذخیره شده با پارامتر و بدون پارامتر

تمام نمونه های استفاده از پارامترها در روش های ذخیره شده ارائه شده فقط برای پارامترهای ورودی ارائه شده است. با این حال، پارامترها ممکن است خروجی باشند. این به این معنی است که ارزش پارامتر پس از اتمام این روش به کسی که موجب این روش (یک روش دیگر، یک ماشه، بسته بندی دستورات، و غیره)، به کسی منتقل می شود. به طور طبیعی، به منظور به دست آوردن پارامتر خروجی، زمانی که تماس باید مشخص شود به عنوان یک پارامتر واقعی ثابت نیست، اما یک متغیر است.

توجه داشته باشید که تعریف در روش پارامتر به عنوان خروجی شما را مجبور به استفاده از آن به عنوان چنین. به این ترتیب، اگر شما یک ثابت را به عنوان یک پارامتر واقعی مشخص کنید، خطاها اتفاق نمی افتد و به عنوان یک پارامتر ورودی معمولی استفاده می شود.

برای مشخص کردن که پارامتر خروجی استفاده می شود، دستورالعمل خروجی استفاده می شود. این کلمه کلیدی پس از توصیف پارامتر ثبت شده است. هنگامی که پارامترهای روش های ذخیره شده را توصیف می کنید، مطلوب است که مقادیر پارامترهای خروجی را پس از ورودی تعیین کنید.

یک مثال از استفاده از پارامترهای خروجی را در نظر بگیرید. ما روش ذخیره شده را بنویسیم، که برای یک کتاب داده شده، تعداد کل نمونه های آن را در کتابخانه و تعداد نمونه های آزاد محاسبه می کند. ما قادر به استفاده از اپراتور بازگشت بازگشت در اینجا نخواهیم بود زیرا تنها یک مقدار را باز می گردانیم، بنابراین ما باید پارامترهای خروجی را در اینجا تعیین کنیم. متن روش ذخیره شده ممکن است مانند این باشد:

ایجاد PROCEDURE COUNT_BOOKS_ALL.
(isbn varchar (14)، خروجی int int، خروجی INFREE INT)
- روش محاسبه تعداد کل دفن زباله های کتاب داده شده
- و تعداد نمونه های رایگان
مانند
- شمارش تعداد کل نسخه ها
select@all \u003d count (*) از نمونه ای که isbn \u003d bysbn است
free \u003d count (*) را از نمونه ای که ISBN \u003d bysbn و yes_no \u003d "1" را انتخاب کنید
برو

یک نمونه از این روش در شکل نشان داده شده است. 10

شکل. 10. تست روش های ذخیره شده با پارامترهای خروجی

همانطور که قبلا ذکر شد، به منظور به دست آوردن ارزش پارامترهای خروجی برای تجزیه و تحلیل، ما باید آنها را با متغیرها تنظیم کنیم، و این متغیرها باید توسط اپراتور اعلام شود. آخرین اپراتور خروجی به ما اجازه داد به سادگی ارزش های به دست آمده را نمایش دهد.

پارامترهای این روش ممکن است حتی متغیرهای مکان نما را نیز داشته باشند. برای انجام این کار، متغیر باید به عنوان یک نوع خاص از داده های مختلف، بدون اتصال به نوع داده های استاندارد سیستم توصیف شود. علاوه بر این، باید مشخص شود که این یک مکان نما متغیر است.

ما ساده ترین روش را می نویسیم که لیستی از کتاب ها را در کتابخانه ما نمایش می دهد. در این مورد، اگر کتاب های بیشتری وجود نداشته باشد، ما نام خود را درون روش خود قرار می دهیم، و اگر لیست کتابها بیش از شماره مشخص شده باشد، ما آنها را به عنوان یک مکان نما با یک برنامه یا ماژول فراخوانی انتقال می دهیم.

متن روش به شرح زیر است:

ایجاد روش Get3Titles.
(MyCursor Cursor خروجی متفاوت)
- عناوین روش چاپ با مکان نما
مانند
- تعیین محلی نوع متغیر مکان نما در روش
set@mycursor \u003d cursor
برای انتخاب عنوان متمایز
از کتاب ها
- مکان نما را باز کنید
باز کردن mycursor.
- توصیف متغیرهای داخلی داخلی
اعلام Title varchar (80)، cnt int
--- وضعیت اولیه متر را نصب کنید
setcnt \u003d 0
- به رشته اول مکان نما بروید
- در حالی که رشته های مکان نما وجود دارد،
- این، در حالی که انتقال به رشته جدید درست
در حالی که (@ fetch_status \u003d 0) و (cnt<= 2) BEGIN
چاپ title
جمع آوری بعدی از mycursor inteTitle
- وضعیت متر را تغییر دهید
set cnt \u003d cnt + 1
پایان.
اگر cnt \u003d 0 چاپ "بدون کتاب های مناسب"
برو

یک مثال از فراخوانی این روش ذخیره شده در شکل نشان داده شده است. یازده

در روش فراخوانی، مکان نما باید به عنوان یک متغیر محلی توصیف شود. سپس ما رویه ما را نام بردیم و نام آن را به نام مکان نما متغیر محلی منتقل کردیم. این روش شروع به کار کرد و سه نام اول را بر روی صفحه نمایش آورد و سپس کنترل روش تماس گیرنده را انتقال داد و پردازشگر را ادامه داد. برای انجام این کار، آن را در حالی که نوع چرخه در طول متغیر جهانی@@@status، که حالت مکان نما را ردیابی می کند، سازماندهی کرده است، و سپس در چرخه تمام رشته های مکان نما دیگر را جابجا می کند.

در پنجره خروجی، ما یک فاصله بزرگ را بین سه ردیف اول و نام های بعدی مشاهده می کنیم. این فاصله نشان می دهد که مدیریت به برنامه خارجی منتقل می شود.

توجه داشته باشید که متغیر Title، محلی برای روش، پس از اتمام عملیات آن نابود خواهد شد، بنابراین در روش فراخوانی دوباره اعلام می شود. ایجاد و باز کردن مکان نما در این مثال در روش رخ می دهد، و بسته شدن، تخریب، تخریب و پردازش اضافی در بلوک فرمان که در آن روش نامیده می شود انجام می شود.

ساده ترین راه برای دیدن متن روش، تغییر یا حذف آن با استفاده از رابط گرافیکی مدیریت شرکت سازمانی. اما شما می توانید این کار را با کمک سیستم ویژه ذخیره شده روشهای Transact-SQL انجام دهید. در Transact-SQL، مشاهده این روش با استفاده از روش سیستم SP_HELPTEXT انجام می شود و روش SP_HELP به شما امکان می دهد اطلاعات کنترل در مورد روش را نمایش دهید. روش های SP_Helptext و SP_HELP استفاده می شود و برای مشاهده چنین اشیاء پایگاه داده مانند جداول، قوانین و تنظیمات پیش فرض.

اطلاعات در مورد تمام نسخه های یک روش، صرف نظر از شماره، بلافاصله نمایش داده می شود. حذف نسخه های مختلف یک روش ذخیره شده نیز به طور همزمان رخ می دهد. در مثال زیر، نشان داده شده است که چگونه نسخه های 1 و 2 تعاریف COUNT_EX_ALL نمایش داده می شود زمانی که نام آن به عنوان پارامتر روش سیستم SP_HELPTEXT نشان داده شده است (شکل 12).

شکل. 12. مشاهده روش متن ذخیره شده با استفاده از روش ذخیره شده سیستم

روش SP_HELP ویژگی ها و پارامترهای روش ایجاد شده را به شرح زیر نشان می دهد:

نام.
مالک
نوع
ایجاد شده_datetime
count_books_all
dBO
روش ذخیره شده
2006-12-06 23:15:01.217
parameter_name
نوع
طول دقت
مقیاس Param_order Collation
isbn
varchar
14 14
خالی 1 cyrillic_general_ci_as.
@همه.
int
4 10
0 2 خالی
@رایگان
int
4 10
0 3 خالی

سعی کنید این پارامترها را خودتان رمزگشایی کنید. آنها راجع به چه چیزی صحبت میکنند؟

1.4 کامپایل روش ذخیره شده

مزیت استفاده از روش های ذخیره شده برای انجام دستورالعمل Transact-SQL این است که آنها در اولین اجرای آن کامپایل شده اند. در طول فرایند تلفیقی، دستورالعمل Transact-SQL از ارائه نمادین اولیه خود در فرم اجرایی تبدیل می شود. هر گونه اشیاء که درخواست تجدید نظر را نیز به یک دیدگاه جایگزین تبدیل می شود. به عنوان مثال، نام جداول به شناسه های شیء تبدیل می شود، و نام ستون در شناسه های ستون.

طرح اجرایی به همان شیوه ای برای اجرای یک دستور تراکنش-SQL ایجاد می شود. این طرح شامل، به عنوان مثال، شاخص های مورد استفاده برای خواندن ردیف از جداول که این روش کشیده شده است. طرح روش در حافظه پنهان ذخیره می شود و برای هر تماس استفاده می شود.

نکته: اندازه حافظه عملیاتی را می توان تعیین کرد به طوری که می تواند بیشتر یا همه در دسترس برای این روش باشد. این زمان مورد نیاز برای دوباره تولید یک طرح را ذخیره خواهد کرد.

1.5. تدوین خودکار خودکار

به طور معمول، طرح اجرای در روش های کش است. این اجازه می دهد تا زمانی که آن را اجرا می شود، بهره وری را افزایش دهید. با این حال، در شرایط خاص، این روش به طور خودکار دوباره کامپایل می شود.

  • این روش همیشه زمانی که SQL Server شروع می شود، دوباره کامپایل می شود. این معمولا پس از راه اندازی مجدد سیستم عامل اتفاق می افتد و زمانی که این روش برای اولین بار پس از خلقت انجام می شود.
  • طرح روش همیشه به طور خودکار مجددا مجددا مجددا تنظیم می شود، اگر شاخص جدول حذف شود که کدام روش کشیده شده است. از آنجا که طرح فعلی به نظر می رسد ردیف جدول را به شاخص که دیگر وجود ندارد، بخوانید، باید یک طرح اجرایی جدید ایجاد کنید. درخواست های روش فقط اگر به روز شود، اجرا خواهد شد.
  • کامپایل برنامه اجرای در صورتی که کاربر دیگر در حال حاضر با این طرح کار می کند. برای کاربر دوم، یک کپی شخصی از طرح اجرای ایجاد شده است. اگر اولین نسخه از این طرح مشغول نیست، لازم نیست که یک کپی دوم ایجاد شود. هنگامی که یک کاربر اجرای این روش را تکمیل می کند، طرح اجرای در حافظه پنهان به کاربر دیگری که دارای وضوح دسترسی مناسب است، در دسترس است.
  • این روش به طور خودکار مجددا مجددا تنظیم می شود اگر حذف و به روز شود. از آنجا که روش جدید ممکن است از نسخه قدیمی متفاوت باشد، تمام نسخه های برنامه اجرایی در حافظه پنهان حذف می شوند و این طرح دوباره کامپایل شده است.

SQL Server به دنبال بهینه سازی روش های ذخیره شده با ذخیره کردن روش های شدید استفاده شده است. بنابراین، برنامه اعدام قدیمی بارگیری شده به حافظه پنهان می تواند به جای یک طرح جدید استفاده شود. برای جلوگیری از این مشکل، حذف و دوباره ایجاد یک روش ذخیره شده یا توقف و فعال کردن SQL Server. این حافظه پنهان را پاک می کند و احتمال کار با طرح اجرای قدیمی را حذف می کند.

این روش همچنین می تواند با گزینه بازپرداخت ایجاد شود. در این مورد، هر بار به طور خودکار به طور خودکار مجددا مجددا مجددا می شود. گزینه های بازپرداخت باید در مواردی که این روش به جداول بسیار پویا اشاره دارد، اعمال شود که رشته های آنها اغلب اضافه می شوند یا به روز می شوند، زیرا منجر به تغییرات قابل توجهی در شاخص های تعریف شده برای جداول می شود.

اگر روش های مجدد کامپایل به طور خودکار تولید نمی شود، می توان آن را اجباری انجام داد. به عنوان مثال، اگر آمار مورد استفاده برای تعیین استفاده از شاخص در این پرس و جو باشد، یا اگر یک شاخص جدید ایجاد شده باشد، مجددا مجبور شده است. برای انجام مجددا مجددا مجددا در دستورالعمل اجرای مجدد، با پیشنهاد مجدد استفاده می شود:

اجرای name_names؛
مانند
<инструкции Transact-SQL>
با بازپرداخت

اگر این روش با پارامترهایی که روش اجرای آن را کنترل می کنند، باید با استفاده از گزینه بازپرداخت استفاده شود. اگر تنظیمات روش ذخیره شده می تواند بهترین مسیر اجرای را تعیین کند، توصیه می شود که در طول عملیات، یک طرح اجرایی را تشکیل دهید، نه اینکه آن را ایجاد کنید، تا زمانی که این روش برای اولین بار خواستار استفاده با تمام درخواست های بعدی باشد، توصیه می شود.

نکته: گاهی اوقات دشوار است که تعیین کنید که آیا گزینه های بازپس گیری در هنگام ایجاد یک روش ضروری است یا خیر. اگر شک و تردید وجود دارد، بهتر است که این گزینه را اعمال نکنید، زیرا روش کامپایل مجدد برای هر تکلیف منجر به از دست دادن یک زمان بسیار ارزشمند پردازنده مرکزی خواهد شد. اگر در هنگام انجام یک روش ذخیره شده نیاز به یک مجتمع مجدد در آینده دارید، ممکن است آن را با اضافه کردن پیشنهاد با تجدید نظر به دستورالعمل اجرا کنید.

شما نمیتوانید گزینه را با بازپرداخت در دستورالعمل های ایجاد روش حاوی گزینه برای تکرار اعمال کنید. این گزینه برای ایجاد یک روش که در طول تکرار انجام می شود استفاده می شود.

1.6 روش های ذخیره شده ذخیره شده

در روش های ذخیره شده، دیگر روش های ذخیره شده را می توان به چالش کشیده، با این حال، محدودیت در سطح لانه سازی وجود دارد. حداکثر سطح لانه سازی 32 است. سطح لانه سازی فعلی را می توان با استفاده از یک متغیر جهانی nestlevel تعیین کرد.

2. ویژگی های تعریف شده توسط کاربر (UDF)

در MS SQL Server 2000، بسیاری از توابع پیش تعیین شده وجود دارد که اجازه می دهد تا اقدامات مختلف. با این حال، همیشه می توانید از برخی از توابع خاص استفاده کنید. برای انجام این کار، با شروع نسخه 8.0 (2000)، این فرصت را برای توصیف توابع کاربر (توابع تعریف شده توسط کاربر، UDF) و ذخیره آنها را به صورت یک شیء پایگاه داده کامل، همراه با روش های ذخیره شده، نمایندگی ها و غیره ذخیره می کند.

راحتی استفاده از توابع تعریف شده توسط کاربر واضح است. بر خلاف روش های ذخیره شده، توابع را می توان به طور مستقیم به بیانیه انتخابی تعبیه کرد و از آنها هر دو برای دریافت مقادیر خاص (در بخش انتخابی) و به عنوان یک منبع داده (در بخش از بخش) استفاده می شود.

هنگام استفاده از UDF به عنوان منابع داده، مزیت آنها بیش از نمایندگی ها در این واقعیت است که UDF، در مقایسه با دیدگاه ها، ممکن است پارامترهای ورودی داشته باشد که می توانید نتیجه عملکرد تابع را تحت تاثیر قرار دهید.

توابع تعریف شده توسط کاربر می تواند سه نوع باشد: توابع اسکالر, توابع درون خطی و توابع عملیاتی چندگانه که نتیجه جدول را نشان می دهند. تمام این نوع توابع را در نظر بگیرید.

2.1. توابع اسکالر

توابع اسکالر یک نتیجه اسکالر را باز می گرداند. این نتیجه می تواند هر نوع توضیح داده شده در بالا باشد، به استثنای متن، ntext، تصویر و نوع تایمز. این ساده ترین شکل تابع است. نحو آن فرم زیر را دارد:


scalar_typ_data را باز می گرداند

شروع.
body_function
بازگشت scalar_mapsion
پایان.

  • پارامتر رمزگذاری قبلا در بخش اختصاص داده شده به روش های ذخیره شده شرح داده شده است؛
  • Schemabinding - عملکرد را به نمودار متصل می کند. این به این معنی است که جداول یا نمایش ها را حذف کنید که بر اساس آن یک تابع مبتنی بر آن است، بدون حذف یا تغییر عملکرد خود. همچنین ممکن است ساختار این جداول را تغییر دهید، در صورتی که بخش متغیر توسط تابع استفاده شود. بنابراین، این گزینه به شما امکان می دهد شرایط را حذف کنید زمانی که تابع از هر جداول یا نمایش ها استفاده می کند، و کسی که در مورد آن نمی داند، آنها را حذف یا تغییر دهید؛
  • scalar_typ_data را باز می گرداند - توصیف نوع داده ای است که یک تابع را باز می گرداند؛
  • scalar_mapsia - بیان که به طور مستقیم نتیجه عملکرد را باز می کند. این باید همان نوع را که پس از بازگشت شرح داده شود، داشته باشد.
  • body_Function مجموعه ای از دستورالعمل های مربوط به Transact-SQL است.

نمونه هایی از استفاده از توابع اسکالر را در نظر بگیرید.

یک تابع را ایجاد کنید که از دو عدد صحیح به ورودی به شکل پارامترها، کوچکترین را انتخاب کنید.

اجازه دهید تابع به نظر می رسد این است:

ایجاد تابع min_num (ra int، bt، int)
بازپرداخت int
شروع.
اعلام @ int
اگر یک.< @b SET @c = @a
set @ b \u003d b \u003d b
بازگشت @
پایان.

ما اکنون این ویژگی را انجام خواهیم داد:

DBO.MIN_NUM را انتخاب کنید (4، 7)

در نتیجه، ما ارزش 4 را بدست آوریم.

شما می توانید این ویژگی را برای پیدا کردن کوچکترین در میان مقادیر ستون جدول اعمال کنید:

MIN_LVL، MAX_LVL، MIN_NUM (MIN_LVL، MAX_LVL) را انتخاب کنید
از مشاغل

یک تابع ایجاد کنید که پارامتر نوع DateTime را دریافت می کند و تاریخ و زمان مربوط به ابتدای روز مشخص شده را دریافت می کند. به عنوان مثال، اگر پارامتر ورودی 13:31 20/09/09 باشد، نتیجه خواهد شد 20.09.03 00:00.

ایجاد تابع dbo.daybegin (dat dateTime)
SmallDateTime را به عنوان باز می گرداند
شروع.
بازگشت تبدیل (DateTime، Floor (Convert (Float، DAT)))
پایان.

در اینجا، ویژگی تبدیل تبدیل نوع تبدیل را انجام می دهد. اول، نوع زمان تاریخ به وسیله نوع شناور هدایت می شود. با این پیشرو، کل بخش تعداد روز است، شمارش از 1 ژانویه 1900، و زمان کسری است. بعد به طور کامل با استفاده از عملکرد کف گرد می شود و به نوع زمان تاریخ تبدیل می شود.

تابع عمل را بررسی کنید:

DBO.DEBEGIN را انتخاب کنید (GetDate ())

در اینجا GetDate () یک تابع است که تاریخ و زمان فعلی را باز می گرداند.

در هنگام محاسبه پارامترهای ورودی استفاده شد. با این حال، شما می توانید از داده های ذخیره شده در پایگاه داده استفاده کنید.

ایجاد یک ویژگی که دو تاریخ را به عنوان پارامترها دریافت می کند: آغاز و پایان فاصله زمانی - و محاسبه درآمد کل فروش برای این فاصله. تاریخ فروش و مقدار از جدول فروش گرفته خواهد شد، و قیمت برای نسخه های فروخته شده در جدول عنوان است.

ایجاد تابع dbo.sumsales (datebegin dateTime، dateend dateTime)
پول را باز می گرداند
مانند
شروع.
اعلام پول SUM.
SELECT SUM \u003d SUM (T.PRICE * S.QTY)

بازگشت sum
پایان.

2.2. توابع درون خطی

این نوع توابع به عنوان یک نتیجه یک مقدار اسکالر را به دست نمی آورند و جدول، یا به جای آن، مجموعه داده ها. این می تواند در مواردی که در روش های مختلف، محرک ها و غیره بسیار راحت باشد، بسیار مناسب است، همان نوع زیر مجموعه اغلب انجام می شود. سپس، به جای نوشتن این درخواست در همه جا، می توانید یک تابع ایجاد کنید و از آن استفاده کنید.

توابع این نوع حتی در مواردی که لازم است جدول بازگشتی وابسته به پارامترهای ورودی باشد، مفید تر است. همانطور که می دانید، نمایش ها نمی توانند پارامترها را داشته باشند، بنابراین تنها توابع درون خطی می توانند مشکل را حل کنند.

ویژگی Fuccia درون خطی این است که آنها می توانند تنها یک درخواست را در بدن خود داشته باشند. بنابراین، توابع این نوع بسیار شبیه به دیدگاه ها هستند، اما آنها می توانند علاوه بر این پارامترهای ورودی داشته باشند. نحو عملکرد درون خطی:

عملکرد تابع [مالک] را ایجاد کنید
([[@ نام پارامتر SCALAR_TIP_DATA [\u003d value_p__omolement] [، ... n]])
جدول را باز می گرداند

برگشت [(<запрос>)]

در تعریف عملکرد نشان داده شده است که جدول را باز می کند؛<запрос> - این پرس و جو است، که نتیجه آن نتیجه عملکرد است.

ما یک تابع شبیه به یک تابع اسکالر را از آخرین نمونه نوشتیم، اما نه تنها نتیجه جمع آوری، بلکه خطوط فروش را نیز از جمله تاریخ فروش، نام کتاب، قیمت، تعداد قطعات و مقدار آن باز می گرداند فروش. تنها کسانی که در مدت زمان مشخصی قرار دارند باید انتخاب شوند. ما متن تابع را رمزگذاری می کنیم تا سایر کاربران بتوانند از آن استفاده کنند، اما نمی توانند آن را بخوانند و اصلاح کنند:

ایجاد تابع sales_period (dateBegin dateTime، dateend dateTime)
جدول را باز می گرداند
با رمزگذاری
مانند
برگشت (
T.Title، T.Price، S.QTY، ORD_DATE را انتخاب کنید، T.Price * S.QTY به عنوان Stoim
از عناوین T پیوستن به فروش S در t.title_id \u003d s.title_id
جایی که ord_date بین dateebegin و dateend
)

در حال حاضر این ویژگی را فراخوانی کنید. همانطور که قبلا ذکر شد، می توانید آن را فقط در بخش از اپراتور انتخاب کنید:

را انتخاب کنید * از sales_period ("09.09.94"، "13.09.94")

2.3. توابع عملیاتی چندگانه که نتیجه جدول را نشان می دهند

اولین نوع توابع در نظر گرفته شده، امکان استفاده از دستورالعمل های بسیاری در Transact-SQL وجود دارد، اما تنها یک نتیجه اسکالر بازگشت. نوع دوم توابع می تواند جداول را بازگرداند، اما بدن آن تنها یک درخواست را نشان می دهد. توابع چند نفره که نتیجه جدولی را باز می گرداند، به شما این امکان را می دهد که خواص دو توابع اول را ترکیب کنید، یعنی آنها ممکن است در بدن بسیاری از دستورالعمل های مربوط به Transact-SQL را شامل شود و یک جدول را به عنوان یک نتیجه برگرداند. نحو عملکرد چند منظوره:

عملکرد تابع [مالک] را ایجاد کنید
([[@ نام پارامتر SCALAR_TIP_DATA [\u003d value_p__omolement] [، ... n]])
بازگشت @ name_named_teult table
<описание_таблицы>

شروع.
<тело_функции>
برگشت.
پایان.

  • جدول<описание_таблицы> - ساختار جدول بازگشتی را توصیف می کند؛
  • <описание_таблицы> - شامل شمارش ستون ها و محدودیت ها است.

در حال حاضر یک مثال را در نظر بگیرید که تنها می تواند تنها با استفاده از توابع این نوع انجام شود.

اجازه دهید یک درخت دایرکتوری و فایل های دروغین در آنها وجود داشته باشد. اجازه دهید کل ساختار در پایگاه داده به صورت جداول توضیح داده شود (شکل 13). در واقع، در اینجا ما یک ساختار سلسله مراتبی برای دایرکتوری ها داریم، بنابراین طرح شامل اتصال جدول پوشه ها با خود است.

شکل. 13. ساختار پایگاه داده برای توصیف سلسله مراتب فایل ها و دایرکتوری ها

در حال حاضر یک تابع را بنویسید که شناسه دایرکتوری را در ورودی دریافت می کند و تمام فایل هایی را که در آن ذخیره می شوند و در تمام دایرکتوری ها در سلسله مراتب ذخیره می شوند، خروجی می کنند. به عنوان مثال، اگر کاتالوگ موسسه در کاتالوگ دانشکده 1، دانشکده 2 و غیره ایجاد شود، کاتالوگ های بخش وجود دارد، و در هر یک از دایرکتوری ها فایل ها وجود دارد، پس زمانی که پارامتر شناسه دایرکتوری را مشخص می کنید، موسسه باید لیستی از تمام فایل ها را برای تمام این کاتالوگ ها داشته باشد. برای هر فایل، نام، اندازه و تاریخ خلقت باید نمایش داده شود.

این کار با استفاده از توابع درون خطی غیرممکن است، زیرا SQL در نظر گرفته شده برای انجام پرسشهای سلسله مراتبی نیست، بنابراین یک درخواست SQL این کار را انجام نمی دهد. عملکرد اسکالر نیز نمی تواند اعمال شود، زیرا نتیجه باید یک جدول باشد. در اینجا ما باید کمک کنیم و یک تابع چند منظوره را که جدول را باز می گرداند کمک کنیم:

ایجاد تابع dbo.getfiles (folder_id int)
Returnsfiles Table (نام varchar (100)، Date_Create DateTime، FileSize Int) به عنوان
شروع.
اعلام جدول tmp (folder_id int)
اعلام cnt int
قرار دادن مقادیر tmp (folder_id)
set cnt \u003d 1
در حالی که cnt.<> 0 شروع
وارد 'tmp را انتخاب کنید folder_id
از پوشه ها F به F.Parent \u003d t.folder_id
جایی که folder_id از tmp) جایی که folder_id از
set cnt \u003d @ @ @ @
پایان.
وارد infiles (نام، date_create، فایل ها)
f.name، f.date_create را انتخاب کنید، f.filesize
از فایل های F پیوستن پوشه ها fl در f.folder_id \u003d fl.id
عضویت در tmp t در fl.id \u003d t.folder_id
برگشت.
پایان.

در اینجا در چرخه در متغیر tmp تمام دایرکتوری های پیوست شده را در تمام سطوح لانه سازی اضافه کنید تا زمانی که دایرکتوری های توپی باقی بمانند. سپس تمام ویژگی های فایل لازم در دایرکتوری های ذکر شده در متغیر tmp در متغیر infiles infiles ثبت می شود.

وظایف کار مستقل

شما باید پنج روش ذخیره شده را از لیست اجباری زیر ایجاد کنید و اشکال زدایی کنید:

روش 1. افزایش زمان تحویل نسخه های کتاب برای یک هفته اگر زمان تحویل فعلی در عرض سه روز قبل از تاریخ فعلی تا سه روز پس از تاریخ فعلی قرار گیرد.

روش 2. شمارش تعداد نمونه های رایگان یک کتاب داده شده.

روش 3. وجود خواننده را با نام خانوادگی مشخص و تاریخ تولد بررسی کنید.

روش 4. وارد کردن یک خواننده جدید با بررسی وجود آن در پایگاه داده و تعریف شماره بلیط جدید خواننده آن.

روش 5. شمارش خوب در شرایط پولی برای خوانندگان بدهکار.

شرح مختصری از روش ها

روش 1. افزایش کتاب

برای هر ورودی در جدول نمونه، بررسی می شود اگر تاریخ تحویل کتاب به یک فاصله زمانی داده می شود. اگر آن را بازدید، تاریخ بازگشت کتاب برای یک هفته افزایش می یابد. هنگام انجام این روش، باید از تابع تاریخ استفاده کنید:

Dateadd (روز،<число добавляемых дней>, <начальная дата>)

روش 2. شمارش تعداد نمونه های رایگان کتاب مشخص شده

پارامتر ورودی روش ISBN - یک رمز منحصر به فرد کتاب است. این روش 0 (صفر) را باز می گرداند اگر تمام نمونه های این کتاب در دست خوانندگان باشند. این روش ارزش N را به دست می آورد، برابر با تعداد نسخه های کتاب، که در حال حاضر در دست خوانندگان هستند.

اگر کتاب هایی با ISBN پیش تعیین شده در کتابخانه نیستند، این روش -100 باز می شود (منهای یکصد).

روش 3. بررسی وجود خواننده با نام خانوادگی مشخص شده و تاریخ تولد

این روش خواننده خواننده را باز می کند اگر خواننده با چنین اطلاعاتی وجود داشته باشد، 0 (صفر) در غیر این صورت.

هنگام مقایسه تاریخ تولد، شما باید از تابع تبدیل تبدیل () تبدیل برای تبدیل تاریخ تولد - متغیر شخصیت نوع varchar (8) استفاده شده به عنوان پارامتر ورودی روش به داده های داده، که در جدول خوانندگان استفاده می شود استفاده می شود. در غیر این صورت، عملیات مقایسه هنگام جستجو برای این خواننده کار نخواهد کرد.

روش 4. وارد کردن یک خواننده جدید

این روش دارای پنج پارامتر ورودی و سه خروجی است.

پارامترهای ورودی:

  • نام کامل با حروف اول؛
  • نشانی؛
  • تاریخ تولد؛
  • تلفن منزل؛
  • کارگر تلفن

پارامترهای خروجی:

  • شماره خواننده؛
  • نشانه ای از اینکه آیا خواننده قبلا در کتابخانه ثبت شده بود (0 - نبود، 1 بود)؛
  • تعداد کتابهایی که پس از خواننده ذکر شده است.
روش 5. شمارش خوب در شرایط پولی برای خوانندگان بدهکار

این روش با مکان نما، که حاوی لیستی از شماره بلیط های خواننده همه بدهکاران است، کار می کند. در طول کار، یک جدول موقت جهانی ## DOLG باید ایجاد شود، که در آن کل بدهی آن برای هر بدهکار برای همه کتابهایی که او بیشتر باز می گردد، ذکر شده است. جبران خسارت پولی در 0.5٪ از قیمت کتاب برای روز تاخیر محاسبه می شود.

روش انجام کار

  • کپی های صفحه نمایش (تصاویر) تایید تغییرات به پایگاه داده؛
  • محتویات جداول پایگاه داده که مورد نیاز برای تأیید صحت کار هستند؛
  • متن ذخیره شده متن با نظرات؛
  • فرآیند شروع روش ذخیره شده با خروجی نتایج عملکرد.

وظایف اضافی

دستورالعمل های زیر ذخیره شده زیر برای وظایف فردی مورد نظر قرار می گیرند.

روش 6. شمارش تعداد کتاب ها در یک موضوع موضوع داده شده که در حال حاضر در کتابخانه حداقل در یک نمونه وجود دارد. منطقه موضوع به عنوان پارامتر ورودی منتقل می شود.

روش 7. یک کتاب جدید را با نشانه ای از موارد آن وارد کنید. هنگام وارد کردن موارد کتاب جدید، فراموش نکنید که شماره های موجود در موجودی خود را وارد کنید. فکر می کنم چگونه می توان آن را انجام داد. من به شما یادآوری می کنم که توابع Max و Min را دارید که به شما امکان می دهد حداکثر یا حداقل مقدار هر ویژگی عددی را به ابزارهای انتخابی انتخاب کنید.

روش 8. تشکیل یک جدول با لیستی از خوانندگان بدهکار، یعنی کسانی که قرار بود کتاب ها را به کتابخانه بازگردانند، اما هنوز به آن بازگشته اند. در جدول نتیجه، هر خواننده بدهکار باید تنها یک بار ظاهر شود، صرف نظر از چند کتاب که او بدهکار است. علاوه بر شماره نام و شماره خواننده در جدول حاصل، شما باید آدرس و آدرس تلفن را مشخص کنید.

روش 9. جستجو برای یک نسخه رایگان از نام مشخص شده کتاب. اگر یک نسخه رایگان وجود داشته باشد، این روش تعداد موجودی نمونه را باز می کند؛ اگر نه، این روش یک لیست از خوانندگان را که این کتاب را دارند، نشان می دهد، نشان دهنده تاریخ بازگشت کتاب و تلفن خواننده است.

روش 10. خروجی فهرست خوانندگان که در حال حاضر یک کتاب واحد را در دست ندارند. در لیست، نام و تلفن را مشخص کنید.

روش 11. خروجی فهرست کتابها نشان دهنده تعداد نسخه های این کتاب در کتابخانه و تعداد نمونه های آزاد در حال حاضر است.

نسخه چاپی

روش های ذخیره شده SQL یک ماژول نرم افزاری اجرایی است که می تواند در اشیاء مختلف ذخیره شود. به عبارت دیگر، این یک شی است که در آن دستورالعمل های SQL وجود دارد. این روش های ذخیره شده را می توان در مشتری نرم افزار انجام داد تا عملکرد خوبی داشته باشد. علاوه بر این، چنین اشیا اغلب از سناریوهای دیگر یا حتی از هر پارتیشن دیگر استفاده می شود.

معرفی

بسیاری معتقدند که آنها شبیه به روش های مختلف (به ترتیب، به جز MS SQL) هستند. شاید این درست باشد آنها پارامترهای مشابهی دارند، می توانند مقادیر مشابهی تولید کنند. علاوه بر این، در برخی موارد آنها تماس می گیرند. به عنوان مثال، آنها با پایگاه های DDL و DML، و همچنین با توابع کاربر (نام کد - UDF) ترکیب شده اند.

در واقع، روش های ذخیره شده SQL دارای طیف گسترده ای از مزایای است که آنها را در میان چنین فرایندهایی اختصاص می دهد. امنیت، تغییرات برنامه نویسی، بهره وری - همه این افراد را جذب می کند که با پایگاه های داده کار می کنند، بیشتر و بیشتر. اوج محبوبیت این روش ها برای سال های 2005-2010 کاهش یافت، زمانی که برنامه از مایکروسافت به نام "SQL Server Management Studio" منتشر شد. با آن، کار با پایگاه داده ها بسیار ساده تر شده است، عملی تر و راحت تر است. از سال به سال، این محبوبیت در برنامه نویسان محبوبیت داشت. امروز یک برنامه کاملا آشنا است که برای کاربران، "ارتباط" با پایگاه های داده، ایستاده بود با "اکسل".

هنگام فراخوانی یک روش، فورا توسط سرور خود بدون فرایندهای غیر ضروری و مداخله کاربر پردازش می شود. پس از آن، شما می توانید هر گونه حذف، اعدام، تغییر انجام دهید. برای همه این ها توسط اپراتور DDL پاسخ داده شده است، که به تنهایی باعث پیچیده ترین اثرات پردازش جسم می شود. و این همه این اتفاق می افتد بسیار سریع، و سرور در واقع بارگذاری نشده است. چنین سرعت و عملکرد به شما اجازه می دهد تا به سرعت مقدار زیادی از اطلاعات را از کاربر به سرور انتقال دهید و بالعکس.

برای پیاده سازی این تکنولوژی، چندین زبان برنامه نویسی وجود دارد. این شامل، به عنوان مثال، PL / SQL از اوراکل، PSQL در سیستم های بینای و فایرفاکس، و همچنین CLASSIC "مایکروسافت" Transact-SQL. همه آنها در نظر گرفته شده برای ایجاد و انجام روش های ذخیره شده، که اجازه می دهد تا در دستگیره های پایگاه داده بزرگ برای استفاده از الگوریتم های خود را. این لازم است برای کسانی که چنین اطلاعاتی را مدیریت می کنند، می توانند تمام اشیا را از دسترسی غیر مجاز افراد شخص ثالث محافظت کنند و به این ترتیب، ایجاد، اصلاح یا حذف داده های خاص را ایجاد می کنند.

بهره وری

این اشیاء پایگاه داده را می توان به روش های مختلف برنامه ریزی کرد. این به کاربران اجازه می دهد تا نوع روش مورد استفاده را انتخاب کنند، که مناسب ترین خواهد بود، که موجب صرفه جویی در قدرت و زمان خواهد شد. علاوه بر این، روش خود پردازش شده است، که از هزینه های بزرگ مبادله موقت بین سرور و کاربر اجتناب می کند. همچنین، ماژول می تواند مجددا برنامه ریزی شده و به جهت مورد نظر به طور مطلق هر زمان تغییر کند. این به خصوص با توجه به سرعت، با توجه به اینکه شروع روش SQL ذخیره شده است شروع می شود: این روند سریعتر از دیگران شبیه به آن است، که آن را راحت و جهانی می سازد.

ایمنی

این نوع پردازش اطلاعاتی متفاوت از فرایندهای مشابه است که در آن امنیت را تضمین می کند. این به دلیل این واقعیت است که دسترسی کاربران دیگر به روش ها می تواند به طور کامل حذف شود. این امر به مدیر اجازه می دهد تا به طور مستقل با آنها عمل کند، بدون ترس از دستگیری اطلاعات یا دسترسی غیر مجاز به پایگاه داده.

انتقال داده

رابطه بین روش ذخیره شده SQL و برنامه کاربردی مشتری، استفاده از پارامترها و مقادیر بازگشتی است. دومی نمی تواند به داده ها در روش ذخیره شده منتقل شود، با این حال، این اطلاعات (به طور عمده بر روی درخواست کاربر) و پردازش شده برای SQL. پس از اینکه روش ذخیره شده کار خود را به اتمام رسانده است، بسته های داده را به عقب برگرداند (اما، دوباره، اگر مورد نظر) به برنامه ای که آن را با استفاده از روش های مختلفی که می تواند به عنوان یک تماس با روش ذخیره شده SQL اجرا شود، به عنوان مثال:

انتقال داده ها با استفاده از پارامتر نوع خروجی؛

انتقال داده با استفاده از اپراتور بازگشت؛

انتقال داده با استفاده از اپراتور انتخاب.

و اکنون ما آن را شکل می دهیم که چگونه این روند از داخل به نظر می رسد.

1. ایجاد یک روش ذخیره سازی ذخیره شده در SQL

شما می توانید یک روش در MS SQL (استودیو مدیریت) ایجاد کنید. پس از ایجاد این روش، آن را به یک گره پایگاه داده قابل برنامه ریزی ذکر شده است که در آن روش ایجاد توسط اپراتور انجام می شود. برای انجام روش های ذخیره شده SQL، از فرآیند EXEC استفاده کنید که شامل نام شیء خود است.

هنگام ایجاد این روش، ابتدا نام آن به نظر می رسد، پس از آن یک یا چند پارامتر به آن اختصاص داده شده است. پارامترها ممکن است اختیاری باشند. پس از پارامتر (ها)، یعنی بدن این روش نوشته می شود، شما باید عملیات لازم را انجام دهید.

واقعیت این است که بدن می تواند متغیرهای محلی را در آن قرار دهد، و این متغیرها محلی و نسبت به روش ها هستند. به عبارت دیگر، آنها را می توان تنها در داخل بدن Microsoft SQL Server در نظر گرفت. روش های ذخیره شده در این مورد محلی محسوب می شوند.

بنابراین، برای ایجاد یک روش، ما نیاز به نام روش و حداقل یک پارامتر به عنوان بدن روش. لطفا توجه داشته باشید که یک گزینه عالی در این مورد، ایجاد و اجرای روش با نام طرح در طبقه بندی است.

بدن این روش ممکن است هر نوع نمونه ای داشته باشد، مانند ایجاد یک جدول، یک یا چند ردیف جدول را وارد کنید، نوع و شخصیت پایگاه داده را تنظیم کنید و غیره. با این وجود، بدن این روش، اجرای برخی از عملیات را در آن محدود می کند. برخی از محدودیت های مهم در زیر ذکر شده است:

بدن نباید هیچ روش ذخیره شده دیگر را ایجاد کند؛

بدن نباید درک نادرست از جسم ایجاد کند؛

بدن نباید هیچ عامل ایجاد کند.

2. نصب متغیر در بدن روش

شما می توانید متغیرهای محلی را برای روش بدن ایجاد کنید، و سپس آنها تنها در داخل بدن قرار می گیرند. تمرین خوب این است که متغیرها را در ابتدای بدن از روش ذخیره شده ایجاد کنید. اما شما همچنین می توانید متغیرها را در هر نقطه از این جسم تنظیم کنید.

گاهی اوقات شما می توانید ببینید که چندین متغیر در یک خط نصب شده اند و هر پارامتر متغیر توسط کاما جدا شده است. همچنین توجه داشته باشید که متغیر دارای پیشوند @ است. در بدن از روش شما می توانید متغیر که در آن شما می خواهید تنظیم کنید. به عنوان مثال، متغیر @ name1 می تواند به انتهای بدن روش نزدیک شود. به منظور تعیین مقدار متغیر اعلام شده، مجموعه ای از داده های شخصی استفاده می شود. بر خلاف وضعیت زمانی که بیش از یک متغیر را در یک خط اعلام کرد، تنها یک مجموعه داده های شخصی در چنین شرایطی استفاده می شود.

اغلب کاربران از یک سوال سوال می کنند: "چگونه می توان مقادیر متعدد را در یک اپراتور در بدن از روش قرار داد؟" خوب. سوال جالب است، اما آنچه را که فکر می کنید بسیار ساده تر است. پاسخ: با استفاده از Steam مانند "انتخاب var \u003d value". شما می توانید از این جفت ها استفاده کنید، کاما را جدا کنید.

در انواع مختلفی از نمونه ها، مردم ایجاد یک روش ذخیره شده ساده و اجرای آن را نشان می دهند. با این حال، این روش می تواند چنین پارامترهایی را انجام دهد که این روند باعث می شود که ارزش ها را به آن نزدیک کند (اما نه همیشه). اگر آنها مطابقت داشته باشند، فرایندهای مربوطه در داخل بدن شروع می شوند. به عنوان مثال، اگر شما یک روش را ایجاد کنید که شهر و منطقه را از تماس گیرنده بگذرانید و اطلاعات مربوط به تعداد نویسندگان را به شهر و منطقه مربوطه بفرستد. این روش جدول نویسندگان پایگاه داده را درخواست خواهد کرد، به عنوان مثال، بارها، برای انجام این شمارش نویسندگان. برای دریافت این پایگاه های داده، به عنوان مثال، گوگل اسکریپت SQL را از صفحه SQL2005 بارگیری می کند.

در مثال قبلی، این روش دو پارامتر را انجام می دهد که به طور مداوم به نام "State وCity" نامیده می شود. نوع داده مربوط به نوع تعریف شده در برنامه است. بدن این روش دارای متغیرهای داخلی totalathors (کل نویسندگان) است، و این متغیر برای نمایش مقدار خود استفاده می شود. بخش انتخاب زیر ظاهر می شود، که همه چیز را شمارش می کند. در نهایت، مقدار محاسبه شده در پنجره خروجی با استفاده از بیانیه چاپ نمایش داده می شود.

نحوه انجام یک روش ذخیره شده در SQL

دو راه برای انجام این روش وجود دارد. مسیر اول نشان می دهد که پارامترها را به عنوان لیست جدا شده توسط کاما پس از نام روش اجرا می شود. فرض کنید ما دو ارزش داریم (همانطور که در مثال قبلی). این مقادیر با استفاده از متغیرهای پارامتر از روش State وCity جمع آوری می شوند. در این روش انتقال پارامترها، سفارش مهم است. این روش انتقال عادی استدلال نامیده می شود. در روش دوم، پارامترها قبلا به طور مستقیم منصوب می شوند، و در این مورد سفارش مهم نیست. این روش دوم به عنوان انتقال استدلال نامیده می شود.

این روش می تواند تا حدودی از معمول جدا شود. به عنوان مثال در مثال قبلی، به عنوان مثال، پارامترها تغییر می کنند. به عبارت دیگر، پارامتر city برای اولین بار ذخیره می شود، و در کنار مقدار پیش فرض ذخیره می شود. پارامتر پیش فرض معمولا به طور جداگانه جدا می شود. روش های ذخیره شده SQL به سادگی پارامترها منتقل می شود. در این مورد، با توجه به اینکه پارامتر UT جایگزین "CA" پیش فرض است. در اجرای دوم، تنها یک مقدار از استدلال برای پارامتر @ city گذشت، و پارامتر state به طور پیش فرض "CA" را به پیش می برد. برنامه نویسان با تجربه توصیه می کنند که تمام متغیرها به طور پیش فرض به انتهای لیست پارامتر نزدیک تر باشند. در غیر این صورت، اعدام امکان پذیر نیست، و پس از آن شما باید با انتقال استدلال های نامیده می شود، که طولانی تر و سخت تر است.

4. روش SQL Server ذخیره شده: روش های بازگشت

سه راه مهم برای ارسال داده ها در روش ذخیره شده وجود دارد. آنها زیر ذکر شده اند:

ارزش روش ذخیره شده را بازگردانید

خروجی روش های ذخیره شده؛

انتخاب یکی از روش های ذخیره شده.

4.1 بازگشت مقادیر روش ذخیره شده SQL

در این تکنیک، این روش ارزش متغیر محلی را تعیین می کند و آن را باز می کند. این روش همچنین ممکن است به طور مستقیم یک مقدار ثابت را بازگرداند. در مثال زیر، ما یک روش را ایجاد کرده ایم که تعداد کل نویسندگان را بازمی گرداند. اگر این روش را با موارد قبلی مقایسه کنید، می توانید ببینید که مقدار چاپ توسط مخالف جایگزین می شود.

حالا بیایید ببینیم چگونه این روش را انجام دهیم و مقدار آن را به آن بازگردانیم. اجرای این روش مستلزم ایجاد یک متغیر و چاپ است که پس از کل فرآیند انجام می شود. لطفا توجه داشته باشید که به جای بیانیه چاپ، شما می توانید از اپراتور انتخاب استفاده کنید، به عنوان مثال، recevalue را انتخاب کنید، و همچنین خروجی VitidValue.

خروجی پارامتر پروسه 4.2 SQL

مقدار پاسخ را می توان برای بازگرداندن یک متغیر که ما در مثال قبلی دیده ایم استفاده می شود. با استفاده از پارامتر خروجی اجازه می دهد تا روش ارسال یک یا چند مقادیر متغیر برای تماس گیرنده. پارامتر خروجی به عنوان این کلمه کلیدی "خروجی" در هنگام ایجاد یک روش نشان داده شده است. اگر پارامتر به عنوان پارامتر خروجی مشخص شود، هدف از این روش باید مقدار آن را اختصاص دهد. روش های ذخیره شده SQL، نمونه هایی از آن را می توان در زیر مشاهده کرد، در این صورت با اطلاعات نهایی بازگردانده می شود.

به عنوان مثال، دو نام خروجی وجود خواهد داشت: totalathors و totalnocontract. آنها در لیست پارامترها مشخص شده اند. این متغیرها مقادیر را در بدن از روش تعیین می کنند. هنگامی که ما از پارامترهای خروجی استفاده می کنیم، تماس گیرنده می تواند مقدار مجموعه را در بدن از روش را ببینید.

علاوه بر این، در سناریوی قبلی، دو متغیر اعلام می شود که ارزش هایی را که روش های ذخیره شده MS SQL سرور را در پارامتر خروجی تنظیم می کنند، مشاهده کنند. سپس روش با ارائه ارزش عادی پارامتر "CA" انجام می شود. پارامترهای زیر خروجی هستند و بنابراین متغیرهای اعلام شده به صورت تجویز شده منتقل می شوند. لطفا توجه داشته باشید که هنگام عبور متغیرها، کلید واژه خروجی نیز در اینجا تنظیم شده است. پس از این روش موفقیت آمیز، مقادیر بازگشتی با پارامترهای خروجی بر روی پنجره پیام ها نمایش داده می شود.

4.3 انتخاب یکی از روش های ذخیره شده SQL

این تکنیک برای بازگرداندن مجموعه ای از مقادیر به عنوان یک جدول داده (RecordSet) به روش ذخیره شده ذخیره شده استفاده می شود. در این مثال، روش ذخیره سازی SQL با پارامترهای authid، جدول "نویسندگان" را با استفاده از فیلتر کردن نوشته های بازگشتی با استفاده از این پارامتر alutid درخواست می کند. بیانیه انتخاب تصمیم می گیرد که آن را باید به روش ذخیره شده ذخیره شده بازگردانده شود. هنگام اجرای روش ذخیره شده، AuthID به عقب منتقل می شود. چنین روش ای در اینجا همیشه یک ورودی یا هر یک را باز می کند. اما روش ذخیره شده هیچ محدودیتی در بازگشت بیش از یک رکورد ندارد. اغلب شما می توانید نمونه هایی را پیدا کنید که در آن بازده داده ها با استفاده از پارامترهای انتخاب شده با مشارکت متغیرهای محاسبه شده با ارائه مقادیر چند نتیجه رخ می دهد.

سرانجام

روش ذخیره شده یک ماژول نرم افزاری نسبتا جدی است که به لطف برنامه مشتری، نصب یا انتقال، و همچنین نصب متغیرهای لازم را به شما ارائه می دهد. از آنجا که روش ذخیره شده بر روی سرور خود انجام می شود، مبادله داده ها در حجم های بزرگ بین سرور و برنامه مشتری (برای برخی محاسبات) می توان اجتناب کرد. این اجازه می دهد تا شما را به کاهش بار در سرور SQL، که، البته، به دست از صاحبان خود را. یکی از زیرمجموعه ها، روش های SQL را ذخیره می کند، اما مطالعه آنها برای کسانی که در ایجاد پایگاه های چشمگیر مشغول به کار هستند، مورد نیاز است. همچنین تعداد زیادی از تفاوت های ظریف نیز وجود دارد که می تواند در هنگام مطالعه روش های ذخیره شده مفید باشد، اما لازم است برای کسانی که قصد دارند به شدت در برنامه نویسی شرکت کنند، از جمله حرفه ای.

هدف از کار - یاد بگیرید چگونه برای ایجاد و استفاده از روش های ذخیره شده در سرور پایگاه داده.

1. مطالعات تمام نمونه ها، تجزیه و تحلیل نتایج اجرای آنها در ابزار استودیو مدیریت SQL Server Server. بررسی حضور فرآیندهای ایجاد شده در پایگاه داده فعلی.

2. انجام تمام نمونه ها و وظایف در دوره کار آزمایشگاهی.

3. انجام وظایف فردی با گزینه ها.

توضیح کار

برای استاد روش های ذخیره سازی برنامه ریزی، هنگام استفاده از پایگاه داده، از پایگاه داده استفاده کنید db_booksکه در کار آزمایشگاهی شماره 1 ایجاد شد. هنگام انجام نمونه ها و وظایف، برای انطباق با نام پایگاه داده، جداول و سایر اشیاء پروژه پرداخت کنید.

روش های ذخیره شده مجموعه ای از دستورات متشکل از یک یا چند اپراتور SQL یا توابع وجود دارد و در پایگاه داده در فرم کامپایل ذخیره می شود.

انواع روش های ذخیره شده

روش های ذخیره شده سیستم در نظر گرفته شده برای انجام اقدامات مختلف اداری. تقریبا تمام اقدامات مدیریت سرور با کمک آنها انجام می شود. می توان گفت که روش های ذخیره شده سیستم یک رابط است که کار را با جداول سیستم فراهم می کند. روشهای ذخیره شده سیستم دارای پیشوند SP_ هستند، در پایگاه داده سیستم ذخیره می شوند و می توانند در زمینه هر پایگاه داده دیگری ایجاد شوند.

روشهای ذخیره شده سفارشی اقدامات خاصی را انجام می دهند. روش های ذخیره شده - یک شیء پایگاه داده کامل است. در نتیجه، هر روش ذخیره شده در یک پایگاه داده خاص قرار دارد، جایی که انجام می شود.

روش های ذخیره شده موقت تنها در حالی که پس از آن آنها به طور خودکار توسط سرور تخریب می شوند. آنها به لاغال و جهانی تقسیم می شوند. روش های ذخیره سازی موقت محلی تنها می تواند از آن دسته از ترکیبات ایجاد شود که در آن ایجاد شده است. هنگام ایجاد چنین روش، نیاز به یک نام از یک نماد # دارد. همانند تمام اشیاء موقت، روش های ذخیره شده این نوع به طور خودکار حذف می شوند زمانی که کاربر قطع، راه اندازی مجدد یا توقف سرور. روشهای ذخیره سازی جهانی برای هر اتصال سرور که در آن یک روش مشابه وجود دارد، در دسترس است. برای تعیین آن، کافی است که نام آن را با نام های ## شروع کنید. این روش ها هنگام راه اندازی مجدد یا توقف سرور، و همچنین هنگام بستن اتصال، در زمینه ای که آنها ایجاد شده اند حذف می شوند.

ایجاد، تغییر روش های ذخیره شده

ایجاد روش ذخیره شده شامل تصمیم گیری نرخ های زیر است: برنامه ریزی حقوق دسترسی. هنگام ایجاد یک روش ذخیره شده، باید در نظر داشته باشید که حقوق دسترسی مشابهی به اشیاء پایگاه داده داشته باشد، که کاربر آن را ایجاد کرد؛ تعیین پارامترهای روش های فروشگاه، روش های ذخیره شده ممکن است پارامترهای ورودی و خروجی داشته باشند؛ توسعه روش ذخیره شده کد. کد روش ممکن است شامل یک توالی از هر دستورات SQL باشد، از جمله فراخوانی سایر روش های ذخیره شده.

نحو اپراتور ایجاد یک جدید یا تغییر روش ذخیره شده در دسترس در MS SQL Server Designations:

(ایجاد | ALTER) PROC [EDURE] NAME_NAME [؛ number] [(@ parameter_name type_data) [متفاوت] [\u003d default] [خروجی]] [، ... n] [با recompile | رمزگذاری | رمزگذاری، رمزگذاری)] [برای تکرار] به عنوان SQL_ اپراتور [... n]

پارامترهای این فرمان را در نظر بگیرید.

با استفاده از prefixes sp_، #، ## ایجاد شده توسط روش می تواند به عنوان سیستمیک یا موقت تعریف شود. همانطور که می توان از نحو فرمان دیده می شود، مجاز به مشخص کردن نام صاحب که این روش ایجاد شده، و همچنین نام پایگاه داده، جایی که باید قرار داده شود، مشخص شود. بنابراین، برای قرار دادن روش ذخیره شده ذخیره شده در یک پایگاه داده خاص، باید فرمان Create Procedure را در زمینه این پایگاه داده اجرا کنید. هنگام تماس با بدن روش ذخیره شده به اشیاء پایگاه داده، می توانید از نام های کوتاه استفاده کنید، I.E. بدون مشخص کردن نام پایگاه داده. هنگامی که شما نیاز به اشاره به اشیاء واقع در پایگاه های دیگر، مشخص کردن نام پایگاه داده باید.

برای انتقال اطلاعات ورودی و خروجی در روش ذخیره شده ذخیره شده، نام پارامتر باید با نماد @ شروع شود. در یک روش ذخیره شده، می توانید پارامترهای بسیاری را از طریق کاما تنظیم کنید. در قسمت از این روش، متغیرهای محلی نباید اعمال شوند، نام آنها با نام پارامترهای این روش همخوانی دارد. برای تعیین نوع این پارامترهای روش ذخیره شده، هر نوع داده SQL مناسب است، از جمله تعریف شده توسط کاربر. با این حال، نوع داده مکان نما فقط می تواند به عنوان پارامتر خروجی روش ذخیره شده، I.E. با خروجی کلمه کلیدی

حضور کلید واژه خروجی به این معنی است که پارامتر مربوطه برای بازگرداندن داده ها از روش ذخیره شده طراحی شده است. با این حال، این بدان معنا نیست که پارامتر برای انتقال مقادیر در روش ذخیره شده مناسب نیست. مشخص کردن کلمه کلیدی خروجی سرور را هنگام خروج از روش ذخیره شده برای اختصاص دادن مقدار فعلی پارامتر متغیر محلی، که زمانی مشخص شد، به عنوان مقدار پارامتر نامیده می شود، دستور می دهد. توجه داشته باشید که هنگام مشخص کردن خروجی کلمه کلیدی، مقدار پارامتر مربوطه هنگام فراخوانی روش تنها می تواند با استفاده از یک متغیر محلی مشخص شود. مجاز به استفاده از هر گونه عبارات یا ثابت های مجاز برای پارامترهای معمولی نیست. کلمه کلیدی متفاوت در رابطه با پارامتر خروجی استفاده می شود که دارای یک نوع مکان نما است. این تعیین می کند که پارامتر خروجی مجموعه نتیجه خواهد بود.

کلمه کلیدی پیش فرض یک مقدار است که پارامتر پیش فرض مربوطه را قبول می کند. بنابراین، هنگامی که روش نامیده می شود، نمی توانید مقدار پارامتر مربوطه را مشخص کنید.

از آنجا که سرور برنامه اجرایی پرس و جو را ذخیره می کند و کد کامپایل شده را پس از تماس بعدی، روش ها در حال حاضر آماده می شود. با این حال، در برخی موارد، هنوز لازم است که کد این روش را دوباره بخوانید. مشخص کردن مجدد کلید واژه، سیستم را برای ایجاد یک طرح روش ذخیره شده برای هر تماس، تجویز می کند.

پارامتر تکثیر در هنگام تکرار داده ها و گنجاندن روش ذخیره شده ذخیره شده به عنوان مقاله در انتشار، تقاضا می شود. رمزنگاری کلمه کلیدی سرور را برای رمزگذاری کد روش ذخیره شده، که می تواند حفاظت در برابر استفاده از الگوریتم های کپی رایت را فراهم کند که کار روش ذخیره شده را اجرا می کند. کلمه کلیدی به عنوان در ابتدای بدن از روش ذخیره شده واقع شده است. در قسمت از این روش، تقریبا تمام دستورات SQL می تواند اعمال شود، معاملات اعلام شده، قفل کردن قفل و تماس با سایر روش های ذخیره شده دیگر. خروجی روش ذخیره شده را می توان با استفاده از دستور بازگشت انجام داد.

حذف روش ذخیره شده

روش رها کردن (نام) [، ... n]

انجام روش ذخیره شده

برای انجام روش ذخیره شده، دستور استفاده می شود: [[EXEC [UTE] name_name [؛ number] [[@ parameter_name \u003d] (value |_name_name) [خروجی] | [پیش فرض]] [، ... n]

اگر تماس به روش ذخیره شده تنها فرمان در بسته نیست، حضور فرمان EXECUTE مورد نیاز است. علاوه بر این، این دستور نیاز به تماس با روش از بدن یک روش یا ماشه دیگر است.

با استفاده از کلمه کلیدی خروجی هنگام فراخوانی روش فقط برای پارامترهایی که اعلام شده است، در هنگام ایجاد یک روش با خروجی کلیدی کلمه، حل شده است.

هنگامی که هنگام تماس با یک روش، کلمه کلیدی پیش فرض برای پارامتر مشخص شده است، مقدار پیش فرض مورد استفاده قرار می گیرد. اساسا، به طور پیش فرض کلمه مشخص شده فقط برای آن پارامترهایی که مقدار پیش فرض تعریف شده است مجاز است.

از نحو فرمان اجرای، واضح است که زمانی که روش نامیده می شود، نام پارامتر را می توان حذف کرد. با این حال، در این مورد، کاربر باید مقادیر پارامترها را به ترتیب تعیین کند، که در آن آنها در هنگام ایجاد یک روش ذکر شده است. مقدار پیش فرض را به پارامتر اختصاص دهید، به سادگی با گذراندن آن، زمانی که لیست شده است، غیر ممکن است. اگر پارامترها مورد نیاز باشند که برای آن مقدار پیش فرض تعریف شده است، یک نشانه نام پارامتر به اندازه کافی صریح در هنگام فراخوانی روش ذخیره شده است. علاوه بر این، به طوری که شما می توانید پارامترها و مقادیر خود را در یک نظم دلخواه فهرست کنید.

توجه داشته باشید که هنگام فراخوانی روش، نام پارامترها با مقادیر یا تنها مقادیر بدون نام پارامتر نشان داده شده است. ترکیب آنها مجاز نیست

استفاده از بازگشت در روش ذخیره شده

به شما اجازه می دهد تا از روش در هر نقطه از شرایط مشخص شده خارج شوید و همچنین به شما اجازه می دهد که نتیجه روش را با شماره ای که می توانید کیفیت و صحت روش را قضاوت کنید، انتقال دهید. یک مثال از ایجاد یک روش بدون پارامترها:

PROCEDURE COUNT_BOOKS را به عنوان COUNT (CODE_BOOK) از کتاب ها بروید

تمرین 1.

exec count_books

نتیجه را بررسی کنید.

یک مثال از ایجاد یک روش با پارامتر ورودی:

ایجاد روش count_books_pages cout_pages به عنوان int به عنوان COUNT (CODE_BOOK) از کتاب هایی که صفحات\u003e \u003d count_pages بروید

وظیفه 2. ايجاد كردن این روش در بخش های ذخیره شده داده های DB_Books از طریق SQL Server Management Studio Studio. آن را با استفاده از فرمان اجرا کنید

exec count_books_pages 100

نتیجه را بررسی کنید.

یک مثال از ایجاد یک روش با پارامترهای ورودی:

ایجاد روش count_books_titleCount_Pages به عنوان int، title به عنوان Char (10) به عنوان شمارش (code_book) از کتاب هایی که صفحات\u003e \u003d count_pages و title_book مانند Title Go

وظیفه 3 این روش را در بخش مراحل ذخیره شده از داده های DB_Books از طریق ابزار SQL Server Management Studio ایجاد کنید. آن را با استفاده از فرمان اجرا کنید

exec count_books_title 100، "p٪"

نتیجه را بررسی کنید.

یک مثال از ایجاد یک روش با پارامترهای ورودی و پارامتر خروجی:

ایجاد روش count_books_itogo count_pages int، title char (10)، intogo int خروجی به عنوان select@itogo \u003d count (code_book) از کتابهایی که صفحات\u003e \u003d count_pages و title_book مانند Title Go

وظیفه 4 این روش را در بخش مراحل ذخیره شده از داده های DB_Books از طریق ابزار SQL Server Management Studio ایجاد کنید. اجرای با استفاده از مجموعه فرمان:

SQL\u003e declare @ q به عنوان int exec count_books_itogo 100، "p٪"، q٪ خروجی را انتخاب کنیدQ

نتیجه را بررسی کنید.

یک مثال از ایجاد یک روش با پارامترهای ورودی و بازگشت:

ایجاد روش Checkname param int به عنوان اگر (انتخاب نام_Author از نویسندگان که Code_Author \u003d param) \u003d "Pushkin A.S." بازگشت 1 بازگشت دیگر 2

وظیفه 5 این روش را در بخش مراحل ذخیره شده از داده های DB_Books از طریق ابزار SQL Server Management Studio ایجاد کنید. آن را با استفاده از دستورات اجرا کنید:

@ @ Return_Status \u003d CheckName 1 را انتخاب کنید "بازگشت وضعیت" \u003d Return_Status

یک مثال از ایجاد یک روش بدون پارامترها برای افزایش ارزش فیلد کلیدی در جدول خرید 2 بار:

ایجاد proc update_proc به عنوان به روز رسانی خرید مجموعه code_purchase \u003d code_purchase * 2

وظیفه 6 این روش را در بخش مراحل ذخیره شده از داده های DB_Books از طریق ابزار SQL Server Management Studio ایجاد کنید. آن را با استفاده از فرمان اجرا کنید

exec update_proc

یک مثال از یک روش با یک پارامتر ورودی برای تمام اطلاعات در یک نویسنده خاص:

CREC SELECT_AUTHORK CHAR (30) را انتخاب کنید (از نویسندگان که در آن Name_Author \u003dK

وظیفه 7

Exec Select_Author "Pushkin A.S." یا Select_Author @ K \u003d "Pushkin A.S." یا EXEC SELECT_AUTHOR @ K \u003d "Pushkin A.S."

یک نمونه از ایجاد یک روش با یک پارامتر ورودی و مقدار پیش فرض برای افزایش مقدار کلید کلید در جدول خرید در تعداد مشخصی از زمان (به طور پیش فرض 2 بار):

ایجاد proc update_procp int \u003d 2 به عنوان به روز رسانی خرید مجموعه code_purchase \u003d code_purchase * p

این روش هیچ اطلاعاتی را به دست نمی آورد.

وظیفه 8 این روش را در بخش مراحل ذخیره شده از داده های DB_Books از طریق ابزار SQL Server Management Studio ایجاد کنید. آن را با استفاده از دستورات اجرا کنید:

exec update_proc 4 یا exec update_procp \u003d 4 یا exec update_proc - مقدار پیش فرض استفاده می شود.

یک مثال از ایجاد یک روش با پارامترهای ورودی و خروجی. ایجاد یک روش برای تعیین تعداد سفارشات انجام شده در طول دوره مشخص شده:

ایجاد proc count_purchases @ d1 smalldatetime، d2 smalldatetime، @ d2 smalldatetime، خروجی int به عنوان انتخاب @ c \u003d count (code_purchase) از خرید که در آن date_order بین @ d1 و @ d2 setC \u003d Isnull (c، 0)

وظیفه 9 این روش را در بخش مراحل ذخیره شده از داده های DB_Books از طریق ابزار SQL Server Management Studio ایجاد کنید. آن را با استفاده از دستورات اجرا کنید:

اعلام @ c2 intec exec count_purchases '01 - ژوئن 2006 '، '01 - 2006'، @ c2 خروجی را انتخاب کنید @ c2

گزینه های K. کار آزمایشگاهی №4

عمومی. در SQL Server Management Studio Utility برای ایجاد صفحه جدید برای کد ("ایجاد یک پرس و جو" دکمه). به صورت برنامه نویسی یک پایگاه داده فعال DB_Books را با استفاده از اپراتور استفاده کنید. ایجاد روش های ذخیره شده با استفاده از اپراتورهای ایجاد شده، و به طور مستقل اسامی روش ها را تعیین می کند. هر روش توسط یک پرس و جو SQL که در کار آزمایشگاهی دوم انجام شد انجام می شود. علاوه بر این، کد پرس و جو SQL باید تغییر کند تا بتوان آنها را به مقادیر میدان منتقل کرد که جستجو انجام می شود.

به عنوان مثال، وظیفه اولیه و درخواست در کار آزمایشگاهی شماره 2:

/ * از ارائه دهندگان کتاب مرجع (جدول تحویل) نام، تلفن و مسافرخانه (Name_Company، Fields تلفن و Inn)، نام شرکت (Name_Company Field) "OAO WORLD" را انتخاب کنید.

SELECT NAME_COMPANY، PHONE، INN از تحویل که در آن نام_company \u003d "OAO WORLD"

* / - این روش کار ایجاد خواهد شد:

ایجاد proc select_name_companycomp char (30) به عنوان انتخاب Name_Company، تلفن، Inn از تحویل که در آن_company \u003dcomp

سفارش روش توسط دستور استفاده می شود:

EXEC SELECT_NAME_COMPANY "OJSC WORLD"

لیست کار

در SQL Server Management Studio Utility، یک برنامه جدید ایجاد کنید. برنامه نویسی یک پایگاه داده فعال فعال ایجاد شده در کار آزمایشگاهی شماره 1، با استفاده از اپراتور استفاده کنید. ایجاد روش های ذخیره شده با استفاده از اپراتورهای ایجاد شده، و به طور مستقل اسامی روش ها را تعیین می کند. هر روش توسط یک پرس و جو SQL که در قالب وظایف جداگانه توسط گزینه ها ارائه می شود، انجام می شود.

انتخاب 1

1. برای خروج از لیستی از کارکنانی که حداقل یک کودک دارند.

2. برای خروج از لیستی از کودکان که هدایا را در دوره مشخص ارائه دادند.

3. برای خروج از یک لیست از والدین که کودکان زیر سن قانونی دارند.

4. برای خروج از اطلاعات در مورد هدایا با هزینه بیش از شماره مشخص شده مرتب شده بر اساس تاریخ.

گزینه 2.

1. فهرست ابزارهای با نوع مشخص شده.

2. تعداد دستگاه های تعمیر شده و کل هزینه تعمیرات را در جادوگر مشخص حذف کنید.

3. برای آوردن فهرست صاحبان ابزار و تعداد درخواست های خود، مرتب شده بر اساس تعداد تجدید نظر، نزولی.

4. اطلاعات مربوط به کارشناسی ارشد را با تخلیه بیش از شماره مشخص شده یا با تاریخ پذیرش کمتر از تاریخ مشخص شده نمایش می دهد.

گزینه 3

2. برای نمایش لیستی از کدهای فروش که رنگ های فروخته شده بیش از شماره مشخص شده است.

3. فروش، مقدار، فروشنده و گل را در کد فروش مشخص شده حذف کنید.

4. نمایش یک لیست از رنگ ها و درجه گل برای گل با ارتفاع تعداد مشخص شده یا شکوفه.

گزینه 4

1. برای برداشتن یک لیست از مواد مخدر با نشانه مشخص شده برای استفاده.

2. برای نمایش لیستی از تحویل، که بیش از تعداد مشخص شده از همان دارو به فروش می رسد.

3. برای برداشت تاریخ تحویل، مقدار، عنوان سر از فروشنده و نام دارو در کد رسید بیش از شماره مشخص شده است.

گزینه 5

2. یک لیست از تجهیزات نوشته شده از نوشته شده برای دلیل نشان داده شده را نمایش دهید.

3. برای برداشت تاریخ رسید، نام تجهیزات، نام مسئول و تاریخ نوشتن برای تجهیزات نوشته شده در دوره مشخص شده.

4. لیست تجهیزات را با نوع مشخص شده یا با تاریخ دریافت بیش از یک مقدار مشخص نمایش دهید.

گزینه 6

1. لیست ظروف با وزن بیش از تعداد مشخص شده.

2. برای خروج از لیست محصولات، در عنوان که قطعه مشخص شده از کلمه یافت می شود.

3. حجم محصول را حذف کنید، نام ظرف، نام محصول را با کد ظرف از مشخص شده حذف کنید معنی اولیه با ارزش نهایی قطعی

4. نمایش فرایند پخت و پز و نام ظرف با مقدار کربوهیدرات بیشتر از مقدار مشخصی است یا مقدار کالری بزرگتر از مقدار مشخص شده است.

گزینه 7

1. برای خروج از لیستی از کارکنان با این پست.

3. برای برداشت تاریخ ثبت نام، نوع سند، نام ثبت کننده و نام سازمان اسناد ثبت شده در دوره مشخص شده.

4. لیستی از اسناد ثبت شده را با یک نوع خاص از سند نشان می دهد یا تاریخ ثبت نام بزرگتر از مقدار مشخص شده است.

گزینه 8

1. برای خروج از لیستی از کارکنان با دلیل مشخص برای اخراج.

3. برای اخراج تاریخ ثبت نام، دلیل اخراج، نام کارمند برای اسناد ثبت شده در دوره مشخص شده.

گزینه 9

1. برای خروج از لیستی از کارکنانی که تعطیلات نوع مشخص شده را شجاع می کنند.

2. لیستی از اسناد مربوط به تاریخ ثبت نام در دوره مشخص شده را بنویسید.

3. برای اخذ تاریخ ثبت نام، نوع تعطیلات، FIO کارمند برای اسناد ثبت شده در دوره مشخص شده.

4. فهرستی از اسناد ثبت شده را با یک کد سند در محدوده مشخص شده نمایش دهید.

گزینه 10

1. برای خروج از لیستی از کارکنان با این پست.

2. برای برداشت لیستی از اسناد که در آن قطعه مشخص شده از کلمه یافت می شود.

3. برای برداشت تاریخ ثبت نام، نوع سند، فیس بوک فرستنده و نام سازمان برای اسناد ثبت شده در دوره مشخص شده.

4. یک لیست از اسناد ثبت شده را با نوع مشخص شده سند یا با کد سند کمتر از یک مقدار مشخص نمایش دهید.

گزینه 11

1. برای برداشتن لیستی از کارکنان منصوب شده به موقعیت مشخص شده.

2. لیستی از اسناد مربوط به تاریخ ثبت نام در دوره مشخص شده را بنویسید.

3. برای اخذ تاریخ ثبت نام، موقعیت، نام کامل برای اسناد ثبت شده در دوره مشخص شده.

4. فهرستی از اسناد ثبت شده را با یک کد سند در محدوده مشخص شده نمایش دهید.

گزینه 12

3. برای برداشتن لیستی از افراد چاقو تجهیزات را به استخدام و تعدادی از تجدید نظر خود، طبقه بندی شده توسط تعداد درخواست تجدید نظر.

گزینه 13

1. لیست تجهیزات را با نوع مشخص شده نمایش دهید. 2. نمایش لیستی از تجهیزات را که یک کارمند خاص را نوشته است را نمایش دهید.

3. نمایش مقدار تجهیزات نوشته شده توسط تجهیزات را نشان می دهد.

4. نمایش اطلاعات در مورد کارکنان با تاریخ اشتغال بیش از یک تاریخ خاص.

گزینه 14

1. لیست گل ها را با نوع ورق مشخص شده نمایش دهید.

2. سیم یک لیست از کدهای درآمد را که رنگ آنها به فروش می رسد بیش از یک مقدار خاص است.

3. تاریخچه رسید، مقدار، نام تامین کننده و رنگ ها را بر روی یک کد خاص از تامین کننده حذف کنید.

4. لیست رنگ ها و انواع گل ها برای گل ها با ارتفاع بیش از یک عدد خاص یا شکوفایی.

گزینه 15

1. برای خروج از لیستی از مشتریانی که در طول دوره مشخص شده به اعداد آمده اند.

2. برای برداشت کل مبلغ پرداخت برای هر مشتری.

3. تاریخ ورود، نوع اتاق، نام مشتریان ثبت شده در دوره مشخص را حذف کنید.

4. یک لیست از مشتریان ثبت شده را در یک نوع خاص بنویسید.

گزینه 16

1. لیست تجهیزات را با نوع مشخص شده نمایش دهید.

2. ارسال لیستی از تجهیزات که یک مشتری خاص را برای اجاره گرفته است.

3. برای برداشتن لیستی از افرادی که تجهیزات را استخدام می کنند، جمع آوری می کنند و تعداد تجدیدنظر آنها بر اساس تعداد تجدید نظر، نزولی است.

4. اطلاعات را از طریق آدرس ها مرتب کنید.

گزینه 17

1. برای نمایش لیستی از مقادیر با هزینه تدارکات بیش از یک مقدار خاص یا یک دوره گارانتی بیش از تعداد مشخص شده.

2. یک لیست از مکان های مقادیر مواد را وارد کنید، در عنوان که کلمه مشخص شده پیدا شده است.

3. مقدار مقدار ارزش را با کد در محدوده مشخص شده حذف کنید.

4. نمایش لیستی از افراد مسئول مالی با تاریخ اشتغال در محدوده مشخص شده را نمایش دهید.

گزینه 18

1. نمایش لیستی از کار تعمیر انجام شده توسط یک استاد خاص.

2. برای برداشت لیستی از مراحل کار موجود در کار، در عنوان که کلمه مشخص شده یافت می شود.

3. برای به دست آوردن مقدار هزینه مراحل تعمیر کار برای کار با کد در محدوده مشخص شده.

4. یک لیست از استادان را از تاریخ استخدام در محدوده مشخص شده سیم بنویسید.

گزینه 19

1. برای برداشتن یک لیست از مواد مخدر با یک نشانه مشخص.

2. لیستی از چک چک چک هایی که بیش از تعداد معینی از مواد مخدر فروخته می شود، سیم کشی کنید.

3. برای برداشت تاریخ فروش، مقدار، نام کامل و درمان برای چک با شماره مشخص شده.

4. نمایش یک لیست از مواد مخدر و واحدهای اندازه گیری برای داروها با یک بسته در بسته بندی بیش از تعداد مشخص شده یا کد دارو کمتر از یک مقدار خاص است.

گزینه 20

1. برای خروج از لیستی از کارکنان با این پست.

2. برای برداشت لیستی از اسناد که در آن قطعه مشخص شده از کلمه یافت می شود.

3. برای برداشت تاریخ ثبت نام، نوع سند، نام کامل و واقعیت اعدام برای اسناد ثبت شده در دوره مشخص شده.

4. یک لیست از اسناد ثبت شده را با نوع سند مشخص شده یا با کد سند در محدوده خاصی نمایش دهید.

در MySQL 5 ویژگی های جدید بسیاری وجود دارد، یکی از مهم ترین آنها، ایجاد روش های ذخیره شده است. در این درس، من به شما می گویم آنچه را که آنها نمایندگی می کنند، و همچنین اینکه چگونه می توانند زندگی را برای شما آسان تر کنند.

معرفی

روش ذخیره شده یک روش کپسول سازی اقدامات تکراری است. در روش های ذخیره شده، شما می توانید متغیرها را اعلام کنید، جریان داده ها را مدیریت کنید، و همچنین سایر تکنیک های برنامه نویسی را اعمال کنید.

دلیل ایجاد آنها روشن و تایید شده توسط استفاده مکرر است. از سوی دیگر، اگر با کسانی که با آنها بی نظیر کار می کنند صحبت کنید، نظرات به دو قسمت کاملا مخالف تقسیم می شوند. فراموش نکنید در مورد آن.

مطابق

  • جداسازی منطق با برنامه های دیگر. روش های ذخیره شده قابلیت ها را محدود می کند؛ این امر اتصال به داده ها را تضمین می کند و آنها را مدیریت می کند بین برنامه های مختلف.
  • جداسازی کاربر از جداول پایگاه داده. این به شما اجازه می دهد تا به روش های ذخیره شده دسترسی پیدا کنید، اما نه به داده های خود.
  • مکانیسم امنیتی را فراهم می کند. مطابق با پاراگراف قبلی، اگر شما می توانید به داده ها فقط از طریق روش های ذخیره شده دسترسی داشته باشید، هیچ کس دیگر نمی تواند داده های شما را از طریق فرمان حذف SQL پاک کند.
  • بهبود عملکرد به عنوان یک نتیجه از کاهش ترافیک شبکه. با روش های ذخیره شده، بسیاری از درخواست ها می توانند ترکیب شوند.

در مقابل

  • بار افزایش بار در سرور پایگاه داده به دلیل این واقعیت است که اکثر کار بر روی بخش سرور انجام می شود و کوچکتر در مشتری است.
  • چیزهای زیادی برای فکر کردن وجود خواهد داشت. شما باید یاد بگیرید syntax MySQL عبارات برای نوشتن روش های ذخیره شده خود را.
  • شما منطق برنامه خود را در دو مکان تکرار می کنید: کد سرور و کد برای روش های ذخیره شده، به این ترتیب فرآیند دستکاری داده ها را پیچیده می کند.
  • مهاجرت با یک DBMS به دیگری (DB2، SQL Server، و غیره) می تواند به مشکلات منجر شود.

ابزار که در آن کار می کنم، مرورگر پرس و جو MySQL نامیده می شود، کاملا استاندارد برای تعامل با پایگاه های داده است. ابزار خط فرمان MySQL یکی دیگر از انتخاب عالی است. من به خاطر این به خاطر این که PhpMyAdmin مورد علاقه هر کس از اجرای پرونده های ذخیره شده پشتیبانی نمی کند، به شما بگویم.

به هر حال، من از ساختار ابتدایی جداول استفاده می کنم تا بتوانید این موضوع را درک کنید. پس از همه، من در مورد روش های ذخیره شده صحبت می کنم، و آنها کاملا پیچیده هستند تا به ساختار بزرگ جداول جدا شوند.

مرحله 1: ما محدودتر را قرار دادیم

محدود کننده یک شخصیت نماد یا رشته ای است که برای نشان دادن مشتری MySQL که شما نوشتن بیان SQL را تکمیل کرده اید استفاده می شود. ابدیت کامل محدود کننده یک نماد یک سمیکال بود. با این حال، مشکلات ممکن است بوجود آید، زیرا ممکن است چندین اصطلاح در روش ذخیره شده وجود داشته باشد، که هر کدام باید به پایان برسد. در این درس من از یک رشته "//" به عنوان یک محدودتر استفاده می کنم.

مرحله 2: نحوه کار با روش های ذخیره شده

ایجاد یک روش ذخیره شده

Delimiter // ایجاد روش `p2` () زبان SQL قطعی SQL Security Security Security Secure Security Security Security Comment" یک روش "شروع" Hello World! "؛ پایان //

بخش اول کد یک روش ذخیره شده را ایجاد می کند. بعد - حاوی پارامترهای اختیاری است. سپس یک نام وجود دارد و، در نهایت، بدن از روش خود را.

نام روش های ذخیره شده به ثبت نام حساس هستند. شما همچنین می توانید چندین روش را با همان نام ایجاد نکنید. در داخل روش ذخیره شده نمی تواند عباراتی باشد که پایگاه داده خود را تغییر دهید.

4 ویژگی روش ذخیره شده:

  • زبان: به منظور حمل قابلیت حمل، پیش فرض SQL مشخص شده است.
  • قطعی: اگر این روش تمام نتایج را به همان نتیجه بازگرداند و پارامترهای ورودی مشابه را دریافت می کند. این برای فرآیند تکراری و ثبت نام است. مقدار پیش فرض قطعی نیست.
  • SQL Security: در طول تماس، حقوق کاربر بررسی می شود. Invoker یک کاربر ایجاد یک روش ذخیره شده است. تعریف کننده روش "خالق" است. مقدار پیش فرض - تعریف کننده.
  • نظر: برای Documencing، مقدار پیش فرض ""

تماس با روش ذخیره شده

برای فراخوانی یک روش ذخیره شده، باید یک کلمه کلیدی تماس بگیرید و سپس نام روش را چاپ کنید و پارامترها (متغیرها یا مقادیر) را در براکت مشخص کنید. براکت مورد نیاز است.

Call Stored_Procedure_Name (Param1، Param2، ....) روش تماس 1 (10، "پارامتر رشته"، parameter_var)؛

تغییر روش ذخیره شده

MySQL تغییر روش را برای تغییر روش ها تغییر داده است، اما برای تغییر تنها برخی از ویژگی ها مناسب است. اگر شما نیاز به تغییر پارامترها یا بدن از روش را تغییر دهید، باید دوباره آن را حذف و ایجاد کنید.

حذف روش ذخیره شده

روش قطره اگر p2 وجود دارد؛

این یک تیم ساده است. اگر چنین بیانیه ای وجود نداشته باشد، اگر چنین روش ای وجود نداشته باشد، یک خطا ایجاد می کند.

مرحله 3: پارامترها

بیایید ببینیم چگونه پارامترها را می توان به روش ذخیره شده منتقل کرد.

  • ایجاد Procedure Proc1 (): لیست خالی پارامترها
  • PROCEDURE PROC1 (در VARNAME DATA-TYPE): یک پارامتر ورودی. کلمه در اختیاری است، زیرا پارامترهای پیش فرض در (دریافتی) هستند.
  • PROCEDURE PROCE1 (OUT VARNAME DATA-TYPE) را ایجاد کنید: یک پارامتر بازگشتی.
  • PROCEDURE PROCE1 را ایجاد کنید (Warname نوع داده): یک پارامتر در همان زمان دریافت و بازگشت.

به طور طبیعی، شما می توانید چند پارامتر از انواع مختلف را تنظیم کنید.

یک نمونه از پارامتر در

delimiter // ایجاد procedure `proc_in` (در var1 int) شروع var1 + 2 به عنوان نتیجه؛ پایان //

مثال مثال پارامتر

Delimiter // ایجاد Procedure `proc_out` (Out var1 varchar (100)) شروع var1 \u003d" این یک آزمون است "؛ پایان //

یک نمونه از پارامتر INOUT

Delimiter // ایجاد روش `proc_inout` (خارج var1 int) شروع مجموعه var1 \u003d var1 * 2؛ پایان //

مرحله 4: متغیرها

حالا من به شما آموزش خواهم داد تا متغیرها را ایجاد کنید و آنها را در مراحل نگهداری کنید. شما باید آنها را به وضوح در ابتدای بلوک آغاز / پایان، همراه با انواع داده های خود اعلام کنید. هنگامی که یک متغیر را اعلام کرده اید، می توانید از آن در همان جایی که متغیرهای جلسه، ادبیات یا نام های بلندگو استفاده می شود استفاده کنید.

نحو اعلامیه متغیر به نظر می رسد:

اعلام DefaultValue پیش فرض Default Default؛

بیایید چندین متغیر را اعلام کنیم:

اعلام A، B int پیش فرض 5؛ Reclare Str varchar (50)؛ اعلامیه امروز Timestamp پیش فرض پیش فرض_date؛ اعلام v1، v2، v3 tinyint؛

کار با متغیرها

هنگامی که یک متغیر را اعلام کرده اید، می توانید مقدار را با استفاده از مجموعه ها یا دستورات انتخاب کنید:

delimiter // ایجاد روش `var_proc` (در Paramstr varchar (20)) شروع به اعلام A، B int پیش فرض 5؛ Reclare Str varchar (50)؛ اعلامیه امروز Timestamp پیش فرض پیش فرض_date؛ اعلام v1، v2، v3 tinyint؛ قرار دادن به مقادیر جدول 1 (a)؛ تنظیم str \u003d "من یک رشته هستم"؛ را انتخاب کنید Concat (Str، Paramstr)، امروز از جدول 2 که در آن B\u003e \u003d 5؛ پایان //

مرحله 5: ساختارهای مدیریت جریان

MySQL پشتیبانی می کند اگر، مورد، اتمام، حلقه ترک، در حالی که و تکرار برای مدیریت جریان در روش ذخیره شده است. ما به نحوه استفاده از اگر مورد و در حالی که اغلب استفاده می شود، نگاه خواهیم کرد.

اگر طراحی

با استفاده از طراحی اگر، ما می توانیم وظایف حاوی شرایط را انجام دهیم:

delimiter // ایجاد روش `proc_if` (در param1 int) شروع به اعلام متغیر 1 int؛ تنظیم متغیر 1 \u003d PARAM1 + 1؛ اگر متغیر 1 \u003d 0 Theten متغیر را انتخاب کنید؛ پایان اگر؛ اگر param1 \u003d 0 Theten را انتخاب کنید "پارامتر ارزش \u003d 0"؛ دیگر "مقدار پارامتر را انتخاب کنید<> 0 "؛ پایان اگر؛ پایان //

طراحی مورد

مورد روش دیگری برای بررسی شرایط و انتخاب یک راه حل مناسب است. این یک راه عالی برای جایگزینی چندین طرح است. طراحی را می توان به دو روش توصیف کرد، انعطاف پذیری را در کنترل عبارات متعدد متعدد ارائه می دهد.

delimiter // ایجاد روش `proc_case` (در param1 int) شروع به اعلام متغیر 1 int؛ تنظیم متغیر 1 \u003d PARAM1 + 1؛ مورد متغیر 1 هنگامی که 0 سپس به مقادیر جدول 1 وارد کنید (Param1)؛ هنگامی که 1 سپس به مقادیر جدول 1 وارد کنید (متغیر 1)؛ دیگر به مقادیر جدول 1 وارد کنید (99)؛ مورد پایان؛ پایان //

delimiter // ایجاد روش `proc_case` (در param1 int) شروع به اعلام متغیر 1 int؛ تنظیم متغیر 1 \u003d PARAM1 + 1؛ مورد زمانی که متغیر 1 \u003d 0 سپس به مقادیر جدول 1 وارد کنید (Param1)؛ هنگامی که متغیر 1 \u003d 1 سپس به مقادیر جدول 1 وارد می شود (متغیر 1)؛ دیگر به مقادیر جدول 1 وارد کنید (99)؛ مورد پایان؛ پایان //

ساخت و ساز در حالی که

از لحاظ فنی، سه نوع چرخه وجود دارد: در حالی که چرخه، چرخه حلقه و تکرار چرخه. شما همچنین می توانید یک چرخه را با استفاده از تکنیک برنامه نویسی "Darth Vader" سازماندهی کنید: عبارات GOTO. در اینجا یک نمونه از یک چرخه است:

delimiter // ایجاد Processure` proc_While` (در param1 int) شروع به اعلام متغیر 1، متغیر int؛ تنظیم متغیر 1 \u003d 0؛ در حالی که متغیر 1< param1 DO INSERT INTO table1 VALUES (param1); SELECT COUNT(*) INTO variable2 FROM table1; SET variable1 = variable1 + 1; END WHILE; END //

مرحله 6: مکان نما

مکان نما ها برای عبور از ردیف درخواست بازگشتی، و همچنین پردازش هر ردیف استفاده می شود.

MySQL از مکان نما ها در مراحل ذخیره شده پشتیبانی می کند. در اینجا یک نحو مختصر از ایجاد و استفاده از مکان نما است.

اعلام مکان نما مکان نما برای انتخاب ...؛ / * Cursor Ad و پر کردن آن * / اعلام ادامه Handler برای یافت نشد / * چه کاری باید انجام دهید، زمانی که هیچ نوشته ای وجود ندارد * / نام مکان نما باز؛ / * مکان نما را باز کنید * / نام مکان نما را به متغیر [، متغیر]؛ / * یک مقدار متغیر را برابر با مقدار ستون فعلی اختصاص دهید * / نام مکان نما نزدیک؛ / * بستن مکان نما * /

در این مثال، ما برخی از عملیات ساده را با استفاده از مکان نما صرف خواهیم کرد:

delimiter // ایجاد روش `proc_cursor` (out param1 int) شروع اعلام A، B، C int؛ اعلام Cur1 Cursor برای انتخاب COL1 از جدول 1؛ اعلام Continue Handler را برای مجموعه ای یافت نشد B \u003d 1؛ باز Cur1؛ تنظیم b \u003d 0؛ تنظیم C \u003d 0؛ در حالی که B \u003d 0 Cur1 را به a؛ اگر b \u003d 0 سپس c \u003d c + a را تنظیم کنید؛ پایان اگر؛ پایان در حالی که؛ بستن Cur1؛ تنظیم param1 \u003d c؛ پایان //

مکان نما ها دارای سه ویژگی هستند که شما باید برای جلوگیری از به دست آوردن نتایج غیر منتظره درک کنید:

  • حساس نیست: یک بار در یک زمان، مکان نما تغییرات را در جدول نشان نمی دهد که بعدا اتفاق می افتد. در حقیقت، MySQL تضمین نمی کند که مکان نما به روز شود، بنابراین آن را نپوشانید.
  • فقط بخوانید: مکان نما ها را نمی توان تغییر داد.
  • بدون عقب نشینی: مکان نما می تواند تنها در یک جهت عبور کند - به جلو، شما نمی توانید رشته ها را بدون انتخاب آنها از بین ببرید.

نتیجه

در این درس، من شما را به اصول کار با روش های ذخیره شده و با برخی از خواص خاص مرتبط با آن معرفی کردم. البته، قبل از تبدیل شدن به یک روش واقعی MySQL، باید دانش را در زمینه هایی از قبیل امنیت، عبارات SQL و بهینه سازی تقویت کنید.

شما باید محاسبه کنید که مزایای استفاده از روش های ذخیره شده را در برنامه خاص خود به شما ارائه می دهد و تنها پس از آن تنها روش های لازم را ایجاد می کند. به طور کلی، من از روش استفاده می کنم؛ به نظر من، آنها باید در پروژه ها به عنوان یک نتیجه از ایمنی، خدمات کد و طراحی عمومی آنها اجرا شوند. علاوه بر این، فراموش نکنید که روش های MySQL هنوز کار می کنند. انتظار بهبود در مورد عملکرد و بهبود. لطفا دریغ نکنید که نظرات را به اشتراک بگذارید.

زنگ.

کسانی هستند که این خبر را قبل از شما خوانده اند.
مشترک شدن برای دریافت مقالات تازه.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه