آموزش PL/SQL قسمت هشتم – تابع در اوراکل PL/SQL

در این قسمت تابع (FUNCTION) در  PL/SQL را توضیح می دهیم. تابع از هر لحاظ مانند پروسیجر است با این تفاوت که برخلاف پروسیجر، یک مقدار برگردانده می شود.

بنابراین تمام مطالبی که در قسمت هفتم آموزش PL/SQL توضیح داده شد در مورد تابع نیز صادق است.

ایجاد تابع

با استفاده از دستور CREATE FUNCTION می توان یک تابع از نوع STANDALONE ایجاد کرد. در ادامه سینتکس ساخت تابع را می بینید.

CREATE [OR REPLACE] FUNCTION function_name

[(parameter_name [IN | OUT | IN OUT] type [, …])]

RETURN return_datatype

{IS | AS}

BEGIN

< function_body >

END [function_name];

این سینتکس همانند دستور ساخت پروسیجر است با این تفاوت که توسط دستور اجباری RETURN یک مقدار با نوع داده خاص به برنامه فراخواننده بازگردانی می شود.

مثال: تعداد کل مشتریان را از جدول COSTUMERS بشمارید و در متغیر TOTAL قرار دهید و توسط تابع totalCustomers برگردانید.

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 |

+—-+———-+—–+———–+———-+

 

CREATE OR REPLACE FUNCTION totalCustomers

RETURN number IS

total number(2) := 0;

BEGIN

SELECT count(*) into total FROM customers;

RETURN total;

END;

/

Function created.

مثال: تابع ()total_costumer را از یک بلاک ANONYMOUS  فراخوانی کنید و مقدار برگشتی را در متغیر C ذخیره کنید.

DECLARE

c number(2);

BEGIN

c := totalCustomers();

dbms_output.put_line(‘Total no. of Customers: ‘ || c);

END;

/

خروجی:

Total no. of Customers: 6

PL/SQL procedure successfully completed.

مثال: بین دو مقدار ورودی مقدار حداکثر را محاسبه کنید و نمایش دهید.

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;

/

خروجی:

Maximum of (23,45): 45

PL/SQL procedure successfully completed.

 

توابع از نوع RECURSIVE یا بازگشتی

همانطور که می دانید یک برنامه یا زیربرنامه می تواند زیربرنامه های دیگر را فراخوانی کند ولی زمانی که یک زیربرنامه خودش را فراخوانی می کند به این عمل RECURSIVE می گویند.

مثال: فاکتوریل عدد ورودی n را محاسبه کنید و برگردانید.

n! = n*(n-1)!

= n*(n-1)*(n-2)!

= n*(n-1)*(n-2)*(n-3)… 1

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;

/

خروجی:

Factorial 6 is 720

PL/SQL procedure successfully completed.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *