Oracle PL/SQL - пример функции CREATE

Эта статья поможет вам понять, как создать пользовательскую функцию. Он также известен как хранимая функция или пользовательская функция.

, Пользовательские функции аналогичны процедурам. Единственная разница

является то, что функция всегда возвращает значение

, Пользовательские функции могут использоваться как часть выражения 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]