رویه ذخیره شده در مقابل عملکرد
رویه ها و توابع ذخیره شده دو نوع بلوک برنامه نویسی هستند. هر دوی آنها باید نامهایی داشته باشند. این نامهای فراخوان برای فراخوانی آنها در یک بلوک برنامهنویسی دیگر مانند توابع و بستههای رویهها یا پرس و جوهای SQL استفاده میشوند. هر دوی این نوع شی پارامترها را می پذیرند و وظیفه پشت آن اشیاء را انجام می دهند. این نحو (در ORACLE) برای ایجاد یک رویه ذخیره شده،است.
ایجاد یا جایگزینی رویه نام (پارامترها)
به عنوان
شروع
بیانات؛
استثنا
Exception_handling
پایان;
و این هم نحوی برای ایجاد یک تابع (در ORACLE)،
ایجاد یا جایگزینی تابع function_name (پارامترها)
return return_datatype
به عنوان
شروع
بیانات؛
return_return_value/variable;
استثنا;
کنترل_استثنا؛
پایان;
رویه های ذخیره شده
همانطور که در بالا ذکر شد رویه های ذخیره شده بلوک های برنامه نویسی نامیده می شوند. آنها پارامترها را به عنوان ورودی کاربر می پذیرند و طبق منطق پشت رویه پردازش می کنند و نتیجه را می دهند (یا یک عمل خاص را انجام می دهند). این پارامترها می توانند از نوع IN، OUT و INOUT باشند. اعلانهای متغیر، تخصیص متغیرها، دستورات کنترل، حلقهها، پرسشهای SQL و سایر فراخوانیها/روشها/بستهها میتوانند داخل بدنه رویهها باشند.
توابع
توابعهمچنین بلوک های برنامه نویسی نامیده می شوند که باید با استفاده از دستور RETURN مقداری را برگردانند و قبل از اینکه مقداری را برگرداند، بدنه آن نیز برخی اقدامات را انجام می دهد (طبق منطق داده شده). توابع نیز پارامترهایی را برای اجرا می پذیرند. توابع را می توان در داخل کوئری ها فراخوانی کرد. هنگامی که یک تابع در داخل یک کوئری SELECT فراخوانی می شود، برای هر ردیف از مجموعه نتایج کوئری SELECT اعمال می شود. چندین دسته از توابع ORACLE وجود دارد. آنها هستند،
توابع تک ردیفی (یک نتیجه را برای هر سطر از پرس و جو برمی گرداند)
زیر دسته های توابع یک ردیف وجود دارد.
- تابع عددی (مثلاً: ABS، SIN، COS)
- عملکرد کاراکتر (مثلاً: CONCAT، INITCAP)
- عملکرد زمان تاریخ (مثلاً: LAST_DAY، NEXT_DAY)
- توابع تبدیل (مثلا: TO_CHAR، TO_DATE)
- عملکرد مجموعه (مثلاً: CARDINALITY، SET)
- توابع تجمعی (یک ردیف را بر اساس گروهی از ردیفها برمیگرداند. مثال: AVG، SUM، MAX)
- توابع تحلیلی
- توابع مرجع شیء
- توابع مدل
- توابع تعریف شده توسط کاربر
تفاوت بین تابع و رویه ذخیره شده چیست؟
• همه توابع باید با استفاده از عبارت RETURN مقداری را برگردانند. رویه های ذخیره شده با استفاده از دستور RETURN مقادیر را بر نمی گرداند. دستور RETURN در داخل یک رویه، کنترل آن را به برنامه فراخوانی باز می گرداند. پارامترهای OUT را می توان برای برگرداندن مقادیر از رویه های ذخیره شده استفاده کرد.
• توابع را می توان در داخل کوئری ها فراخوانی کرد، اما رویه های ذخیره شده را نمی توان در داخل کوئری ها استفاده کرد.
• نوع داده RETURN باید برای ایجاد یک تابع گنجانده شود، اما در رویه ذخیره شده DDL، چنین نیست.