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

فهرست مطالب این نوشته
997696

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

Function در SQL چیست؟

توابع SQL، نوعی از اشیاء پایگاه داده هستند. این اشیاء شامل مجموعه‌ای از عبارت‌‌های SQL بوده و با هدف اجرای وظایف خاصی استفاده می‌شوند. هر تابع‌ داده‌هایی را به عنوان پارامترهای ورودی دریافت می‌کند. بر روی پارامترهای دریافت شده، عملیات مشخصی را انجام می‌دهد و سپس نتیجه نهایی را در خروجی برمی‌گرداند. باید به این مسئله توجه کنیم که نتیجه اجرای Function در SQL چیست. توابع همیشه یا مقداری مجزا یا یک جدول را در خروجی برمی‌گردانند.

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

نکته: SQL Server اجازه نمی‌دهد که از توابع برای حذف، اضافه و به‌روزرسانی داده در جدول‌ استفاده کنیم.

قوانین مربوط به ساخت Function در SQL چیست؟

در این قسمت از مطلب، قوانین مهم و اصلی مربوط به تعریف تابع در SQL Server را به شکل فهرستی مرتب و منظم جمع‌آوری کرده‌ایم.

  1. هر تابع باید دارای یک نام باشد. نام تابع را نمی‌توان با استفاده از کاراکترهای خاصی مانند @  و $  و #  و غیره شروع کرد.
  2. تنها عبارتی که با توابع کار می‌کند، عبارت SELECT در SQL است.
  3. توابعی مانند AVG  و COUNT  و SUM  و MIN  و DATE  و غیره می‌توانند در هر جایی داخل کوئری SELECT در SQL استفاده شوند.
  4. توابع بعد از فراخوانی شدن، کامپایل می‌شوند.
  5. لازم است که تمام توابع مقدار یا نتیجه‌ای را برگردانند.
  6. توابع فقط از پارامترهای ورودی استفاده می‌کنند.
  7. در داخل توابع مجاز به استفاده از عبارت‌های TRY  و CATCH  نیستیم.

یادگیری کامل SQL Server با فرادرس

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

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

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

در ادامه چند مورد از این فیلم‌های آموزشی را برای مخاطبان فرادرس فهرست کرده‌ایم.

انواع Function در SQL چیست؟

نرم‌افزار مدیریت پایگاه داده SQL Server، توابع را به دو نوع کلی تقسیم می‌کند.

  1. توابع سیستمی
  2. توابع تعریف شده توسط کاربر

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

در ادامه مطلب هر دو شکل تابع بالا را با دقت و به طور کامل توضیح داده‌ایم.

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

این نوع از توابع با اهداف مختلفی توسط خود نرم‌افزار SQL Server تعریف شده‌اند. به تمام توابع تعریف شده توسط سیستم، توابع سیستمی گفته می‌شود. به عبارت دیگر، تمام توابع درونی که توسط SQL Server پشتیبانی می‌شوند، با عنوان «توابع تعریف شده توسط سیستم» (System-Defined Functions) شناخته می‌شوند. استفاده از این توابع درونی، باعث صرفه‌جویی بسیار زیادی در زمان می‌شود. زیرا در هنگام توسعه‌ پایگاه‌های داده، بیشتر زمان، صرف انجام کارهای تکراری و مشخصی می‌شود. این نوع از توابع معمولا توسط عبارت‌های SQL و با هدف انجام بعضی از محاسبات و دستکاری داده‌ها به کار برده می‌شوند. دو نوع کلی از توابع تعریف شده توسط سیستم وجود دارند.

  1. «توابع اسکالر» (Scalar Function)
  2. «توابع تجمعی» (Aggregate Function)

هر دو نوع تابع بالا را در ادامه توضیح داده‌ایم.

توابع اسکالر

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

فضای مفهومی از کدها که به ترتیب ومانند نقطه‌های نورانی و منظم دیده می‌‌شوند. فلش زرد به سمت راست تصویر

در پایین فهرستی از کاربردی‌ترین توابع اسکالر در SQL را معرفی کرده‌ایم.

  • abs(-10.67): این تابع مقدار قدر مطلق عدد داده شده را برمی‌گرداند. در نتیجه، نتیجه حاصل از اجرای این عبارت برابر با 10.67  است.
  • rand(10): این تابع عدد تصادفی را از بین ۱۰ رقم مختلف تولید می‌کند.
  • round(17.56719,3): این تابع عدد داده شده را تا تعداد رقم مشخص شده بعد از علامت کاما رند می‌کند. در اینجا عدد ۳ به عنوان محدوده رُند کردن مشخص شده است. در نتیجه خروجی برابر با 17.567  می‌شود.
  • upper(‘dotnet’): این تابع تمام کاراکترهای انگلیسی رشته داده شده را به حروف الفبای بزرگ انگلیسی تبدیل می‌کند. نتیجه اجرای این عبارت برابر با DOTNET  است.
  • lower(‘DOTNET’): این تابع تمام کاراکترهای انگلیسی رشته داده شده را به حروف الفبای کوچک انگلیسی تبدیل می‌کند. نتیجه اجرای این عبارت برابر با dotnet است.
  • ltrim(‘ dotnet’): این تابع فضای خالی سمت چپ رشته داده شده را حذف می‌کند. در نتیجه بعد از اجرای آن خروجی به شکل dotnet  نمایش داده می‌شود.
  • convert(int, 15.56): این تابع مقدار داده شده با نوع Float را به نوع Integer تبدیل می‌کند. در نتیجه خروجی این عبارت برابر با 15  است.

توابع تجمعی

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

  • max(): این تابع از بین مجموعه مقادیر دریافت شده مقدار بیشینه را پیدا کرده و به بیرون برمی‌گرداند.
  • min(): این تابع از بین مجموعه مقادیر دریافت شده مقدار کمینه را پیدا کرده و به بیرون برمی‌گرداند.
  • avg(): این تابع مقدار میانگین را از روی داده‌های مجموعه مقادیر دریافت شده محاسبه کرده و به بیرون برمی‌گرداند.
  • count(): این تابع تعداد متغیر دریافت شده خود را در بین مجموعه مورد نظر شمارش کرده و به بیرون برمی‌گرداند.

Function های تعریف شده توسط کاربر

«تابع‌های تعریف شده توسط کاربر» (User-Defined Functions | UDFs)، به توابعی گفته می‌شود که توسط خود کاربران پایگاه داده تعریف می‌شوند. این تابع، منطق عملیاتی خاصی را به صورت مجموعه‌ای از کدهای محصور شده در می‌آورند. بعدا هر جا که نیاز شد، کاربر می‌تواند از این تابع برای انجام محاسبات خود در SQL Server استفاده کند. توابع تعریف شده توسط کاربر هم مقداری را به عنوان مقدار ورودی دریافت می‌کنند. سپس بر روی آن عملیات مشخص شده توسط کاربر را انجام می‌‌دهند. در آخر هم نتیجه بدست آمده را به بیرون از تابع برمی‌گردانند. وجود این توابع به گسترش امکانات پایگاه‌ داده – فراتر از توانایی که توابع درونی فراهم می‌کنند – کمک می‌کند. این نوع از توابع را می‌توان درون پایگاه‌های داده تعریف شده کاربران یا پایگاه‌های داده سیستمی ایجاد کرد.

توابع تعریف شده توسط کاربر را می‌توان به سه دسته کلی تقسیم کرد.

  1. تابع اسکالر
  2. «تابع مقدار-جدول درون‌خطی» (Inline Table-Valued Function)
  3. «تابع مقدار-جدول چندعبارتی» (Multi-Statement Table-Valued Function)

در ادامه مطلب تمام تابع‌های نام برده شده بالا را به ترتیب توضیح داده‌ایم. همچنین بیان کرده‌ایم که روش تعریف Function در SQL چیست.

تابع اسکالر

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

کامپیوتر و صفحات کدنویسی در بین دو گلدان مختلف قرار گرفته است. - Function در SQL چیست

نمونه کد برای ساخت و مقدار دهی جدول در SQL

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

کدهای بالا، جدول نگهداری مشخصات کارمندان را ایجاد می‌کند. نام این جدول Employee  است. مشخصات تعریف شده برای کارمندان در جدول Employee  شامل شماره شناسایی کارمند «EmpID»، نام «FirstName»، نام خانوادگی «LastName»، میزان حقوق «Salary» و آدرس «Address» است. در خطوط انتهایی هم اطلاعات مربوط به چهار شخص مختلف را به عنوان کارمند به این جدول وارد کرده‌ایم.

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

بعد از اجرای کد بالا، تمام داد‌ه‌های موجود در جدول Employee  توسط خط آخر – یعنی Select * from Employee - فراخوانی شده و در خروجی نمایش داده می‌شوند.

EmpID      FirstName          LastName           Salary    Address
----------- ------------------ ------------------ --------- -----------------
1           Mohan             Chauhan           22000      Delhi
2           Asif              Khan              15000      Delhi
3           Bhuvnesh          Shakya            19000      Noida
4           Deepak            Kumar             19000      Noida

نمونه کد تعریف تابع اسکالر توسط کاربر

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

همین‌طور که مشاهده می‌کنید، برای این تابع دو ورودی تعریف شده‌اند. @FirstName   و @LastName  با نوع varchar  به عنوان ورودی‌های این تابع تعریف شده‌اند. منطق تابع به این صورت است که نام و نام خانوادگی را همراه با فضای خالی در وسط به یکدیگر می‌چسباند. به این صورت نام کامل شخص ایجاد شده و به بیرون برگشت داده می‌شود. نوع داده برگشتی از نوع varchar(101)  است.

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

بعد از اجرای این کوئری، خروجی زیر تولید شده و به کاربر نمایش داده می‌شود.

| Name                 | Salary |
|----------------------|--------|
| Mohan Chauhan        | 22000  |
| Asif Khan            | 15000  |
| Bhuvnesh Shakya      | 19000  |
| Deepak Kumar         | 19000  |

نمونه کد برای تعریف تابع مقدار-جدول درون خطی

«تابع مقدار-جدول درون‌خطی» (Inline Table-Valued Function) بر اساس منطق عملیاتی مورد نظر کاربر، طراحی می‌شود. این تابع به عنوان نتیجه در خروجی، جدول برمی‌گرداند. مقدار متغیر جدول باید تنها توسط یک عبارت SELECT فراخوانی شود.

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

استوانه نورانی در مقابل مانیتور بزرگ در فضایی با نورپردازی نئونی

با اجرای کوئری پایین، داده‌های واکشی شده توسط این تابع را در خروجی نمایش می‌دهیم.

در کوئری بالا، تابع fnGetEmployee  را فراخوانی کردیم. این تابع، همانطور که قبلا تعریف شده بود تمام اطلاعات موجود در جدول Employee  را استخراج کرده و به بیرون برمی‌گرداند. تابع fnGetEmployee  با داد‌ه‌های برگشت داده شده مانند جدول مستقلی رفتار می‌کند. با به‌کارگیری نماد *  تمام ستون‌های جدول فراخوانی شده انتخاب شده‌اند. در نهایت هم تمام اطلاعات مربوط به کارمندان در خروجی نمایش داده می‌شود.

| EmpID | FirstName  | LastName  | Salary | Address |
|-------|------------|-----------|--------|---------|
| 1     | Mohan      | Chauhan   | 22000  | Delhi   |
| 2     | Asif       | Khan      | 15000  | Delhi   |
| 3     | Bhuvnesh   | Shakya    | 19000  | Noida   |
| 4     | Deepak     | Kumar     | 19000  | Noida   |

نمونه کد برای تعریف تابع مقدار-جدول چند عبارتی

«تابع مقدار-جدول چند عبارتی» (Multi-Statement Table-Valued Function) توسط کاربران پایگاه داده ساخته می‌شود. این تابع بر اساس منطق عملیاتی تعریف شده برای آن عمل کرده و در نهایت مقدار خروجی را به شکل جدولی به بیرون برمی‌گرداند. در این نوع از تابع، متغیر جدولی را باید به شکل صریح و با مشخصات کامل تعریف کرد. مقادیر موجود در متغیر جدولی را می‌توان از طریق چند عبارت SQL مختلف فراخوانی کرد.

در کادر زیر، تابعی را با هدف اجرای عملیات بر روی ستون‌های EmpID و FirstName و Salary ایجاد کرده‌ایم.

کوئری بالا، تابعی را به نام fnGetMulEmployee  ایجاد می‌کند. این تابع، متغیر جدولی سفارشی‌سازی شده‌ای با نام @Emp  را در خروجی برمی‌گرداند. متغیر @Emp  شامل ستون‌هایی است که موارد زیر را نشان می‌دهند.

  • شماره شناسایی کارمند «EmpID»
  • نام کوچک «FirstName»
  • میزان حقوق دریافتی آن شخص «Salary»

تابع fnGetMulEmployee، جدول @Emp  را با کمک داده‌های جدول Employee  پُر می‌کند. در تابع fnGetMulEmployee  مبلغ حقوق کارمند اول تغییر داده می‌شود. اما این تغییر در میزان حقوق هیچ تاثیری بر روی داده‌های تابع اصلی Employee  ندارد. به این شکل می‌توان یکپارچگی داده‌ها را تضمین کرد. در خروجی تابع، می‌توان مقدار تغییر داده شده جدول @Emp  را مشاهده کرد.

کله‌ای که حاوی تفکراتی از دنیای دیجیتالی است. سر انسان با دایره‌های نورانی زرد رنگ

با کمک کوئری زیر، تابع fnGetMulEmployee  را بر روی جدول Employee  اجرا کرده و خروجی را نمایش می‌دهیم.

با اجرای کوئری بالا، جدول سفارشی‌سازی شده‌ای از روی جدول اصلی Employee  ایجاد شده و به کاربر نمایش داده می‌شود. این جدول شامل شماره شناسایی کارمندان «EmpID»، نام کوچک آن‌ها «FirstName» و میزان حقوق دریافتی آنان «Salary» است. با این تفاوت که میزان حقوق اولین کارمند تغییر داده شده است و مبلغ 25000  در جدول نمایش داده می‌‌شود.

| EmpID | FirstName  | Salary |
|-------|------------|--------|
| 1     | Mohan      | 25000  |
| 2     | Asif       | 15000  |
| 3     | Bhuvnesh   | 19000  |
| 4     | Deepak     | 19000  |

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

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

| EmpID | FirstName  | LastName  | Salary | Address |
|-------|------------|-----------|--------|---------|
| 1     | Mohan      | Chauhan   | 22000  | Delhi   |
| 2     | Asif       | Khan      | 15000  | Delhi   |
| 3     | Bhuvnesh   | Shakya    | 19000  | Noida   |
| 4     | Deepak     | Kumar     | 19000  | Noida   |

آشنایی با پایگاه های داده مختلف

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

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

مجموعه آموزش پایگاه داده از مبتدی تا حرفه‌ای - دستور order by در sql
برای دسترسی به مجموعه فیلم های آموزش پایگاه داده فرادرس، روی تصویر کلیک کنید.

تفاوت بین رویه و Function در SQL چیست؟

«زبان کوئری‌نویسی ساختاریافته» (Structured Query Language) یکی از زبان‌های کامپیوتری است که برای تعامل با پایگاه‌های داده رابطه‌ای مورد استفاده قرار می‌گیرد. توابع یکی از مفاهیم پایه در این زبان برنامه نویسی هستند. از توابع برای انجام نوعی از عملیات محاسباتی بر روی داده‌های ورودی استفاده می‌شود. اما رویه‌ به مجموعه‌ای از قوانین و دستورالعمل‌ها گفته می‌شود.

در این بخش از مطلب مهمترین تفاوت‌های بین رویه و Function را به صورت مرتب و مختصر بیان کرده‌ایم.

  • اصول پایه: Function-‌ها از داده‌های ورودی برای محاسبه مقدار خروجی استفاده می‌کنند. اما رویه‌ها از داده‌های ورودی برای تعیین اینکه در موقعیت‌های مختلف چه عملی باید انجام شود، استفاده می‌کنند.
  • بلوک‌های Try-Catch : توابع اس کیو ال از بلوک‌های Try-Catch  پشتیبانی نمی‌کنند. اما رویه‌ها از این بلوک‌ها پشتیبانی می‌کنند.
  • کوئری‌های SQL:‌ درون کوئری‌های SQL می‌توانیم توابع را فراخوانی کنیم. اما امکان فراخوانی رویه‌ها وجود ندارد.
  • عبارت SELECT: در عبارت‌های SELECT می‌توانیم تابع‌ها را فراخوانی کنیم. اما نمی‌توان از درون عبارت‌های SELECT رویه‌ها را فراخوانی کرد.
  • مقدار بازگشتی: تابع فراخوانده شده، مقدار یا دستور کنترلی به فراخواننده خود برمی‌‌گرداند. اما رویه به فراخواننده خود فقط دستورالعمل کنترلی برمی‌گرداند. رویه‌ها در خروجی مقدار برنمی‌گردانند.
  • عبارت‌های DML: نمی‌توان از عبارت‌های DMLدر داخل Function استفاده کرد. این مورد شامل توابع Insert  و Delete  و Update  هم می‌شود. اما همیشه می‌توان در رویه‌ها از توابع DML استفاده کرد.
  • فراخوانی: از رویه‌ می‌توان برای فراخوانی Function استفاده کرد. اما هیچ Function نمی‌تواند رویه‌ای را فراخوانی کند.
  • کامپایل: توابع با هربار فراخوانده شدن در داخل برنامه یکبار هم کامپایل می‌شوند. اما رویه‌ها باید فقط یکبار کامپایل شوند. حتی اگر چندین بار نیاز به استفاده از رویه‌‌ای باشد، می‌توان‌ آن را فراخوانی کرد. در فراخوانی‌های تکراری، رویه نیازی به کامپایل شدن ندارد.
  • عبارت: عبارت‌های SQL باید با استفاده از توابع مدیریت شوند. در حالی که نیازی به مدیریت عبارت‌ها با استفاده از رویه نیست.

به موارد فهرست بالا باید چند نکته مهم دیگر هم اضافه کنیم.

  • برعکس «رویه‌های ذخیره شده» (Stored Procedure)، توابع فقط مقدار برمی‌گردانند.
  • برعکس رویه‌های ذخیره شده، توابع وقتی که فرخوانی می‌شوند فقط می‌توانند پارامتر تعیین شده را به عنوان داده ورودی بپذیرند.
  • همانند رویه‌های ذخیره شده، می‌توان توابع را هم تا ۳۲ سطح به صورت تودرتو مورد استفاده قرار داد.
  • توابع تعریف شده توسط کاربر می‌توانند تا ۱۰۲۳ پارامتر ورودی بپذیرند در حالی که رویه‌های ذخیره‌شده تا ۲۱۰۰ پارامتر ورودی را دریافت می‌کنند.
  • توابع تعریف شده توسط کاربر نمی‌توانند مقداری با نوع XML را در خروجی برگردانند.
  • توابع تعریف شده توسط کاربر از مدیریت خطاهای استثنا پشتیبانی نمی‌کنند.
  • توابع تعریف شده توسط کاربر فقط می‌توانند «رویه‌های ذخیره شده گسترش‌یافته» (Extended Stored Procedures) را فراخوانی کنند.

جمع‌بندی

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

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

source

توسط expressjs.ir