В этой главе мы обсудим функции в 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, он дает следующий результат —