Эта статья поможет вам понять, как создать пользовательскую функцию. Он также известен как хранимая функция или пользовательская функция.
, Пользовательские функции аналогичны процедурам. Единственная разница
является то, что функция всегда возвращает значение
, Пользовательские функции могут использоваться как часть выражения SQL.
1. Функция - Получить отформатированный адрес
В этом примере мы создадим функцию для получения отформатированного адреса путем указания имени человека.
1.1 Создать таблицы и функции.
-- creating table person__info CREATE TABLE person__info ( PERSON__ID номер (5) первичный ключ, FIRST__NAME varchar2 (20), LAST__NAME varchar2 (20) );
--creating table person__address__details CREATE TABLE person__address__details ( PERSON__ADDRESS__ID number(5) primary key, PERSON__ID number(5) references person__info(person__id), CITY varchar2(15), STATE varchar2(15), COUNTRY varchar2(20), ZIP__CODE varchar2(10) );
--creating function get__complete__address создать или заменить FUNCTION get__complete__address (in__person__id IN NUMBER) RETURN VARCHAR2 IS person__details VARCHAR2 (130); НАЧАТЬ ВЫБЕРИТЕ «Name-» || person.first__name || ' «|| person.last__name || ', City-' || address.city || ', штат-' || address.state || ', страна-' || address.country || ', почтовый индекс-' || address.zip__code INTO person__details ОТ person__info person, person__address__details адрес WHERE персона .person__id = in__person__id AND address.person__id = person.person__id; RETURN (person__details); END get__complete__address;
1.2 Вставьте данные для тестирования.
INSERT INTO person__info VALUES (10, «Луис», «Томас»); INSERT INTO person__info VALUES (20, «Wang», «Moris»); INSERT INTO person__address__details VALUES (101,10, «Вегас», «Невада», «США», «88901»); INSERT INTO person__address__details VALUES (102,20, «Карсон», «Невада», «США», «90220»);
1.3 Отображение данных.
выберите ** из PERSON__INFO;
[Смещ по столбцы = ",, " опции =" заголовок",]| ================================ | PERSON ID | FIRST NAME | LAST__NAME | 10 | Луис | Томас | 20 | Ван | Морис | ================================
выберите ** из PERSON__ADDRESS__DETAILS;
[Смещ по столбцы = ",,,,, " опции =" заголовок",]| ================================================= =========== | PERSON ADDRESS ID | PERSON ID | ГОРОД | ГОСУДАРСТВО | СТРАНА | ZIP CODE | 101 | 10 | Вегас | Невада | США | 88901 | 102 | 20 | Карсон | Невада | США | 90220 | ================================================= ===========
1.4 Вызов функции. Мы можем вызвать функцию многими способами. Здесь сначала мы
вызовет его в операторе SELECT. И тогда мы будем называть это из
dbms
output.put
line
SELECT get__complete__address (10) AS "Персональный адрес" FROM DUAL; -- output -- Name-Luis Thomas, City-Vegas, State-Nevada, Country-US, ZIP Code-88901
ВКЛЮЧИТЬ СЕРВЕРУ ВЫХОД; EXECUTE dbms__output.put__line (get__complete__address (20)); -- output -- Name-Wang Moris, City-Carson, State-Nevada, Country-US, ZIP Code-90220
2. Function – Check Palindrome String
In this example, we will create a function to check whether a given string is palindrome or not.
Палиндром - это слово, фраза, число или другая последовательность символов который читает то же самое, что и вперед, например мадам или гоночный автомобиль. https://en.wikipedia.org/wiki/Palindrome
2.1 Создание функции.
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ checkForPalindrome (inputString VARCHAR2) RETURN VARCHAR2 - это результат VARCHAR2 (75); reversedString VARCHAR2 (50); НАЧАТЬ ВЫБРАТЬ ОБРАТНУЮ (inputString) INTO reversedString ОТ ДВОЙНОГО; - Использование UPPER для игнорирования чувствительности к регистру. IF UPPER (inputString) = UPPER (reversedString) ЗАТЕМ ВОЗВРАТ (inputString || 'Палиндром.'); END IF; ВОЗВРАТ (inputString || 'НЕ Палиндром.'); КОНЕЦ checkForPalindrome;/.... 2.2 Вызов функции.
ВЫБЕРИТЕ checkForPalindrome ('КОМПЬЮТЕР') ОТ ДВОЙНОГО; — Выход - КОМПЬЮТЕР НЕ Палиндром.
ВЫБЕРИТЕ checkForPalindrome ('MAdam') ОТ ДВОЙНОГО; — Выход - Мадам это палиндром.
ВЫБЕРИТЕ checkForPalindrome ('KANAK') ОТ ДВОЙНОГО;
— Output — KANAK IS a palindrome.
=== 3. Function – Calculate income tax In this example, we will create a function to calculate income tax, assumed tax rate is 30% of all annual income from salary. 3.1 Create tables and function.
--creating table person
CREATE TABLE person ( PERSON__ID number(5) primary key, FULLNAME varchar2(20) );
--creating table person salary details
CREATE TABLE person salary details ( SALARY ID номер (5) первичный ключ, PERSON ID номер (5) ссылочных персон (person__id), ЗАПАСНЫЙ номер (8), MONTH varchar2 (9), № ГОДА (4) );
--creating function
CREATE OR REPLACE FUNCTION calculate__tax(personId NUMBER) RETURN NUMBER IS tax NUMBER(10,2);
BEGIN tax := 0;
SELECT (sum(salary)** 30)/100 INTO tax FROM person__salary__details WHERE person__id = personId;
RETURN tax;
END calculate__tax;
3.2 Вставьте данные для тестирования.
INSERT INTO person VALUES (101,'Mark Phile');
INSERT INTO person salary details VALUES (1,101,15000,'JANUARY',2016); INSERT INTO person salary details VALUES (2,101,15000,'FEBRUARY',2016); INSERT INTO person salary details VALUES (3,101,15000,'MARCH',2016); INSERT INTO person salary details VALUES (4,101,18000,'APRIL',2016); INSERT INTO person salary details VALUES (5,101,18000,'MAY',2016); INSERT INTO person salary details VALUES (6,101,18000,'JUNE',2016); INSERT INTO person salary details VALUES (7,101,18000,'JULY',2016); INSERT INTO person salary details VALUES (8,101,18000,'AUGUST',2016); INSERT INTO person salary details VALUES (9,101,18000,'SEPTEMBER',2016); INSERT INTO person salary details VALUES (10,101,18000,'OCTOBER',2016); INSERT INTO person salary details VALUES (11,101,18000,'NOVEMBER',2016); INSERT INTO person salary details VALUES (12,101,18000,'DECEMBER',2016);
3.3 Отображение данных.
select ** from PERSON;
[cols=",",options="header",] | =================== | PERSON__ID | FULLNAME | 101 | Марк Фил | ===================
select ** from PERSON SALARY DETAILS;
[cols=",,,,",options="header",] | =============================================== | SALARY__ID | PERSON__ID | SALARY | MONTH | ГОД | 1 | 101 | 15000 | ЯНВАРЬ | 2016 | 2 | 101 | 15000 | ФЕВРАЛЬ | 2016 | 3 | 101 | 15000 | МАРТ | 2016 | 4 | 101 | 18000 | АПРЕЛЬ | 2016 | 5 | 101 | 18000 | МАЙ | 2016 | 6 | 101 | 18000 | ИЮНЬ | 2016 | 7 | 101 | 18000 | ИЮЛЬ | 2016 | 8 | 101 | 18000 | АВГУСТ | 2016 | 9 | 101 | 18000 | СЕНТЯБРЬ | 2016 | 10 | 101 | 18000 | ОКТЯБРЬ | 2016 | 11 | 101 | 18000 | НОЯБРЬ | 2016 | 12 | 101 | 18000 | ДЕКАБРЬ | 2016 | ================================ ============== 3.4 Вызов функции.
SELECT person.fullname, sum(sal.salary) AS AnnualSalary, sal.year,calculate tax(101) AS tax FROM person,person salary details sal WHERE person.person id = 101 and sal.year = 2016 GROUP BY person.fullname, sal.year;
Выход [cols=",,,",options="header",] | ======================================== | FULLNAME | ГОДОВОЙ | НАЛОГ | НАЛОГ | Mark Phile | 207000 | 2016 | 62100 | ================================= === Рекомендации , https://docs.oracle.com/cd/B19306__01/server.102/b14200/functions231.htm[User Определенные функции: - Официальные документы Oracle], https://docs.oracle.com/cd/B19306__01/server.102/b14200/statements__5009.htm#i2153260[Create Функция: - Официальные документы Oracle] ссылка://тег/функция/[функция]ссылка://тег/оракул/[оракул]ссылка://тег/палиндром/[палиндром]ссылка://тег/plsql/[plsql]