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

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 2 از 2

نام تاپيک: تفاوت بین تابع و Stored Procedure

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض تفاوت بین تابع و Stored Procedure

    سلام

    من 2 تا تابع ایجاد کردم. یکی مثلا یک عدد میگیره و میره یک سطر برمی گردونه(تابع با برگرداندن جدول)
    تابع دوم یک اسم میگیره و مثلا یک عدد برمیگردونه

    حالا stored procedure
    هم ساختم. مثلا نام شهر میدم و در اون جدول هر چی نام شهر میبینه با نام جدیدی که بهش دادم تغیر میده

    یعنی در کل فرق بین تابع و stored procedure تو این هست که اون میره یک کاری انجام میده و یک جدول یا مقدرا انجام میده
    اما stored procedure یک وظیفه ای انجام میده بدون نیاز به برگرداند چیزی؟

    میشه مثالی بزنید از تفاوت هاش.واقعا نیاز دارم.
    دو تا مثال که مثلا با تابع نشه انجام داد و با Stored Procedure میشه. .. و برعکس
    ممنون

  2. #2
    پروفشنال anvar.net's Avatar
    تاريخ عضويت
    Apr 2007
    محل سكونت
    IRAN
    پست ها
    648

    پيش فرض

    تعاریف : روال ذخیره شده : برنامه یا روالی است که بصورت فیزیکی در داخل پایگاه داده قرار می گیرد, مزیت استفاده از رال ذخیره شده در این است که هر وقت توسط کاربر فراخواین و اجرا شود توسط موتور پایگاه داده و بر روی سرور پایگاه داده مجزا اجرا می شود لذا بصورت مستقیم به داده های دیتابیس دسترسی دارد.
    در عوض تابع : یک روال روتین است که منطق خاصی را بصورت کپسوله در خود دارد که توسط سایر کوئری ها مورد استفاده قرار می گیرد. تفاوت تابع با نما یا ویو هم در این است که بر خلاف ویو , تابع می تواند چندین دستور Select داشته باشد.
    کلا در SQL دو نوع تابع وجود دارد, توابع پیش ساخته سیستم که معمولا Window functions خوانده میشوند, مثلا تابع جمع ستون ها, میانگین, ماکسیموم, گرفتن تاریخ جاری و ......, نوع دوم از توابع , توابعی هستند که توسط کاربر تعریف می شوند این توابع خود می توانند با توجه به مقدار برگشتی در 2 دسته قرار بگیرند
    توابعی Scalar که توسط کاربر تعریف می شوند یک مقدار داده ای منفرد از نوعی که در قید تصریح شده باشد را برگشت می دهند نوع داده ای مقدار برگشت هم می تواند هر چیزی به جزء Text - NText-Image-Cursor و timestamp باشد.
    مثلا در مثال زیرکه یک تابع Scalar است, تابع یک مقدار ورودی ProductID را می گیرد و یک مقدار داده ای را نیز برگشت می دهد که مجموع تعداد جنس مورد نظر (جنس خاص با ProductID گرفته شده بعنوان پارامتر ورودی) در انبار است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در کوئری زیر از تابع بالا استفاده می کنیم و مجموع تعداد جنس هایی که ProductModelID آنها بین 75 و 80 را می گیریم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نوع دوم از توابع , توابع جدول مقدار هستند, و برگشتی این توابع از نوع Datatable است.

    نوع سومی را هم می توان در نظر گرفت که به توابع داخلی موسوم هستند, این توابع دارای یک دستور Select ساده هستند.
    حالا تفاوت روال های ذخیره شده و تابع :
    روال های ذخیره شده می توانند مقدار برگشتی صفر یا n داشته باشند اما در تابع مقدار برگشتی منفرد است.
    توابع را می توان از داخل روال های ذخیره شده فراخوانی کرد اما حالت عکس امکان پذیر نیست.
    در روال های ذخیره شده خطاها را می توان در بلوک try catch مهار و مدیریت کرد اما در توابع نمی توان از این بلوک استفاده کرد.
    توابع را می توان در قسمت های مختلف مانند Where-Having و Select استفاده کرد اما برای روال های ذخیره شده اینطور نیست.

    و .................... چندین اختلاف بنیادی دیگه که در اینجا جای بحث نیست

  3. این کاربر از anvar.net بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •