Учебники

PL / SQL — Функции

В этой главе мы обсудим функции в PL / SQL. Функция такая же, как процедура, за исключением того, что она возвращает значение. Поэтому все обсуждения предыдущей главы верны и для функций.

Создание функции

Автономная функция создается с помощью оператора CREATE FUNCTION . Упрощенный синтаксис для оператора CREATE OR REPLACE PROCEDURE выглядит следующим образом:

CREATE [OR REPLACE] FUNCTION function_name 
[(parameter_name [IN | OUT | IN OUT] type [, ...])] 
RETURN return_datatype 
{IS | AS} 
BEGIN 
   < function_body > 
END [function_name];

Куда,

  • имя-функции указывает имя функции.

  • Опция [ИЛИ ЗАМЕНА] позволяет модифицировать существующую функцию.

  • Список необязательных параметров содержит имя, режим и типы параметров. IN представляет значение, которое будет передано извне, а OUT представляет параметр, который будет использоваться для возврата значения вне процедуры.

  • Функция должна содержать инструкцию возврата .

  • Предложение RETURN указывает тип данных, который вы собираетесь вернуть из функции.

  • Функция body содержит исполняемую часть.

  • Ключевое слово AS используется вместо ключевого слова IS для создания отдельной функции.

имя-функции указывает имя функции.

Опция [ИЛИ ЗАМЕНА] позволяет модифицировать существующую функцию.

Список необязательных параметров содержит имя, режим и типы параметров. IN представляет значение, которое будет передано извне, а OUT представляет параметр, который будет использоваться для возврата значения вне процедуры.

Функция должна содержать инструкцию возврата .

Предложение RETURN указывает тип данных, который вы собираетесь вернуть из функции.

Функция body содержит исполняемую часть.

Ключевое слово AS используется вместо ключевого слова IS для создания отдельной функции.

пример

В следующем примере показано, как создать и вызвать автономную функцию. Эта функция возвращает общее количество ЗАКАЗЧИКОВ в таблице клиентов.

Мы будем использовать таблицу CUSTOMERS, которую мы создали в главе « Переменные PL / SQL»

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; 
/ 

Когда приведенный выше код выполняется с использованием подсказки SQL, он даст следующий результат:

Function created.

Вызов функции

При создании функции вы даете определение того, что должна делать функция. Чтобы использовать функцию, вам нужно будет вызвать эту функцию для выполнения определенной задачи. Когда программа вызывает функцию, управление программой передается вызываемой функции.

Вызываемая функция выполняет определенную задачу, и когда выполняется оператор return или когда достигнут последний оператор end , она возвращает управление программой обратно в основную программу.

Чтобы вызвать функцию, вам просто нужно передать необходимые параметры вместе с именем функции, и если функция возвращает значение, вы можете сохранить возвращенное значение. Следующая программа вызывает функцию totalCustomers из анонимного блока —

DECLARE 
   c number(2); 
BEGIN 
   c := totalCustomers(); 
   dbms_output.put_line('Total no. of Customers: ' || c); 
END; 
/

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат —

Total no. of Customers: 6  

PL/SQL procedure successfully completed. 

пример

В следующем примере демонстрируются объявление, определение и вызов простой функции PL / SQL, которая вычисляет и возвращает максимум два значения.

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, он дает следующий результат —

Maximum of (23,45): 45   

PL/SQL procedure successfully completed. 

PL / SQL рекурсивные функции

Мы видели, что программа или подпрограмма может вызывать другую подпрограмму. Когда подпрограмма вызывает себя, она называется рекурсивным вызовом, а процесс называется рекурсией .

Чтобы проиллюстрировать концепцию, давайте вычислим факториал числа. Факториал числа 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; 
/

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат —