PDA

مشاهده نسخه کامل : مشکل عمیق در درک 2 مفهوم رویه ذخیره شده و تریگر



life24
23-03-13, 21:35
سلام

نوروز مبارک :give_rose:
من واقعا به بن بست رسیدم و منبع فارسی اصلا پیدا نکردم درست و حسابی تو اینترنت.
Stored Procedure را با مثال و Syntax داشته باشم؟
همچنین Trigger با مثال و سینتکس مربوطه؟

لطف بفرمائید یاری کنید :give_rose:

ravegoat
24-03-13, 14:14
با سلام!
عید شما هم مبارک. :1. (35):

بنده تا حالا از این دو شی در پایگاه داده استفاده نکردم که بتونم خیلی دقیق راهنمایی تون کنم ولی اطلاعاتی رو که دارم در اختیارتون می ذارم؛ امیدوارم مفید باشه:

Stored Procedure (به اختصار SP) شبیه یک تابع هستش که می تونه مجموعه ای از دستورات SQL رو اجرا کنه. ما به جای اینکه بیاییم چند تا فرمان SQL رو در یک جدول پشت سر هم اجرا کنیم، یه SP تعریف می کنیم و اون فرمان ها رو در داخلش قرار می دیم و از به بعد فقط اون SP رو اجرا می کنیم؛ به عبارتی SP میشه نماینده ی اجرای اون فرمان ها (عین Function). مزیت دیگه اینه که Stored Procedure می تونه مثل تابع هم ورودی (آرگومان) داشته باشه و هم خروجی (مقدار بازگشتی) و داخلش میشه حلقه و دستورات شرطی هم تعریف کرد. درنتیجه میشه کارهای پیچیده روی پایگاه داده رو تنها با فراخوانی یه SP انجام داد که باعث کاهش حجم ترافیک درخواست ها هم میشه.
کلیدی ترین ویژگی SP سرعت اجرای بالا اون هستش. وقتی شما یک SQL Statement رو اجرا می کنید، پایگاه یه بار کامپایل میشه و بعد دستور اجرا میشه. درنتیجه اگر شما بخواهید n تا Statement رو اجرا کنید، n بار زمان باید صرف کامپایل پایگاه بشه و زمانی هم برای اجرای اون n تا دستور. در حالی اگر ما همین Statement ها رو وارد یه SP کنیم, پایگاه یک بار برای همیشه با اون دستورات Precompile میشه و با فرخوانی اون SP دیگه هیچ زمانی صرف کامپایل نمیشه و فقط زمان صرف اجرای دستورات میشه. به همین دلیله که بهش می گن Stored Procedure یعنی روند ذخیره شده.
اینم از Syntax ش:
Only the registered members can see the link

تریگر همون SP هستش ولی فقط یه تفاوت بنیادی باهاش داره. SP با دستور کاربر اجرا میشه. کاربر روی یک دکمه کلیک می کنه و فرضا" یه جدول به روز میشه. ولی تریگر شامل یک یا چند تا SP هستش که به شکل خودکار با وقوع رویداد های خاصی (Only the registered members can see the link) اجرا میشه. ممکنه ما یه SP رو اجرا کنیم و به واسطه ی اون چند تا تریگر هم به طور ناخواسته اجرا بشه. از این حرف میشه نتیجه گرفت که در داخل تریگر این امکان هست که یک SP رو فرخوانی کرد ولی از داخل یک SP نمیشه یه تریگر رو اجرا کرد.
به عنوان مثال ما در یک برنامه ی مدیریت کارمندان یک SP برای امور مرخصی اداری ایجاد می کنیم. طبیعی هستش که باید به ازای مرخصی یه کسری حقوق هم در نظر بگیریم. پس میشه یه تریگر هم تعریف کرد که وقتی جدول مرخصی تغییر کرد (جز رویداد های خاص محسوب میشه) تو جدول حقوق هم کسری اعمال بشه. در نهایت زمانی که ما روی دکمه ی مرخصی کلیک کنیم, با اجرای یه SP مرخصی کارمند در جدول مربوطه درج میشه و به واسطه ی تریگر تعریف شده کسری حقوق هم به طور خودکار در جدول مخصوص به خودش اعمال میشه.
اینم از Syntax این یکی:
Only the registered members can see the link

برای اطلاعات بیش تر پیرامون این دو تا شی در MS SQL به پیوند زیر مراجعه کنید (برای سایر نرم افزار های پایگاه داده نظیر MySQL هم کافیه یه جست و جوی ساده کنید...سورس هاش فراوونه):
Only the registered members can see the link

موفق باشید
آرمین