با عرض سلام و خسته نباشید خدمت کاربران محترم سایت آموزشی پی وی لرن. و کاربرانی که آموزش کامل PL/SQL را دنبال می کنند. در این پست آموزشی، ما در مورد توابع در PL / SQL بحث خواهیم کرد. یک تابع در PL / SQL یک روش مشابه با یک روش است، به جز آنکه یک مقدار را باز می گرداند. بنابراین، تمام بحث های جلسات قبلی برای توابع درست نیز صادق است.
در ادامه مبحث با ساختار توابع در PL / SQL و نحوه ایجاد و تعریف یک تابع در PL / SQL آشنا خواهید شد.
توابع در PL / SQL یک تابع PL / SQL مستقل با استفاده از عبارت CREATE FUNCTION ایجاد می شود.
دستورالعمل ساده برای دستور CREATE OR REPLACE PROCEDURE به شرح زیر است:
1 2 3 4 5 6 7 | CREATE [OR REPLACE] FUNCTION function_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] RETURN return_datatype {IS | AS} BEGIN < function_body > END [function_name]; |
جایی که :
مثال زیر نشان می دهد که چگونه در توابع در PL / SQL یک تابع مستقل ایجاد و تماس بگیرید. این تابع مجموع تعداد مشتریان را در جدول مشتری باز می کند.
ما از جدول CUSTOMERS استفاده خواهیم کرد که در جلسه متغیرهای PL / SQL آن را ایجاد کردیم.
1 2 3 4 5 6 7 8 9 10 11 12 | Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+----------+ |
1 2 3 4 5 6 7 8 9 10 | CREATE OR REPLACE FUNCTION totalCustomers RETURN number IS total number(2) := 0; BEGIN SELECT count(*) into total FROM customers; RETURN total; END; / |
هنگامی که کد بالا با استفاده از SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 | Function created. |
هنگام ایجاد یک تابع در PL / SQL، شما تعریفی از عملکرد تابع را ارائه می دهید. برای استفاده از یک تابع، شما باید این تابع را برای انجام کار مشخص تعریف کنید. هنگامی که برنامه یک تابع را فراخوانی می کند، کنترل برنامه به تابع نامیده می شود.
یک تابع فراخوانی کار مشخصی را انجام می دهد و هنگامی که دستور return آن، اجرا می شود یا وقتی آخرین دستور end بدست می آید، کنترل برنامه به برنامه اصلی بازگردانده می شود.
برای فراخوانی یک تابع، شما به سادگی باید پارامترهای مورد نیاز را با نام تابع منتقل کنید و اگر تابع یک مقدار را بازگرداند، می توانید مقدار بازگشتی را ذخیره کنید. برنامه زیر این تابع totalCustomers را از یک بلوک ناشناس نمایش می دهد.
1 2 3 4 5 6 7 | DECLARE c number(2); BEGIN c := totalCustomers(); dbms_output.put_line('Total no. of Customers: ' || c); END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 | Total no. of Customers: 6 PL/SQL procedure successfully completed. |
مثال زیر نشان می دهد اعلام، تعریف و فراخوانی یک تابع در PL / SQL ساده است که حداکثر دو مقدار را محاسبه می کند و به آن باز می گرداند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | DECLARE a number; b number; c number; FUNCTION findMax(x IN number, y IN number) RETURN number IS z number; BEGIN IF x > y THEN z:= x; ELSE Z:= y; END IF; RETURN z; END; BEGIN a:= 23; b:= 45; c := findMax(a, b); dbms_output.put_line(' Maximum of (23,45): ' || c); END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 | Maximum of (23,45): 45 PL/SQL procedure successfully completed. |
ما دیده ایم که یک برنامه یا زیر برنامه ممکن است زیر برنامه دیگری را فراخوانی کند.
هنگامی که یک زیر برنامه به خودی خود تماس می گیرد، به عنوان یک فراخوانی بازگشتی نامیده می شود و این روند به عنوان بازگشت شناخته می شود.
برای توضیح مفهوم، فاکتوریل یک عدد را محاسبه کنیم. فاکتوریل یک عدد n به صورت زیر تعریف می شود:
1 2 3 4 | n! = n*(n-1)! = n*(n-1)*(n-2)! ... = n*(n-1)*(n-2)*(n-3)... 1 |
برنامه زیر محاسبه فاکتوریل یک شماره داده شده را با فراخوانی خود به صورت بازگشتی نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | DECLARE num number; factorial number; FUNCTION fact(x number) RETURN number IS f number; BEGIN IF x=0 THEN f := 1; ELSE f := x * fact(x-1); END IF; RETURN f; END; BEGIN num:= 6; factorial := fact(num); dbms_output.put_line(' Factorial '|| num || ' is ' || factorial); END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 | Factorial 6 is 720 PL/SQL procedure successfully completed. |
توابع SQL در پایگاه داده ی ORACLE گنجانده شده (به صورت دورن ساخته و نوکار در آن وجود دارند) و برای استفاده در تمامی دستورهای SQL قابل دسترس می باشند.
این امکان نیز وجود دارد که شما با استفاده از PL/SQL توابع سفارشی خود را ایجاد کنید.