Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab_04_Oracle %28PL_SQL%29 / Додатково_Теорія_03_Вбудовані_функції

.pdf
Скачиваний:
6
Добавлен:
11.02.2015
Размер:
643.85 Кб
Скачать

$

Додавання символу $ до числа ліворуч

$999999

$1234

 

 

 

 

.

Десяткова крапка на заданій позиції

999999.99

1234.00

 

 

 

 

,

Кома – роздільник десяткових розрядів

999,999

1,234

 

 

 

 

MI

Постановка мінуса праворуч для

999999MI

1234-

негативних чисел

 

 

 

 

 

 

 

RR

Узяття негативних чисел у дужки

999999PR

1234

 

 

 

 

EEEE

Математична нотація (повинні бути

99. 999EEEE

1. 234E+03

задані чотири Е)

 

 

 

 

 

 

 

 

Застосовується для множення на 10n, де

 

 

V

n – число позначених дев'ятками

9999V99

123400

 

розрядів після V

 

 

 

 

 

 

B

Прибирання нульових значень: видавати

B9999.99

1234.00

нульові значення як пробіли, без нуля

 

 

 

 

 

 

 

Примітка. Наведені вище числові формати можуть також використовуватися в команді COLUMN середовища SQL*Plus.

Функція TO_NUMBER

TO_NUMBER( рядок );

Функція TO_NUMBER перетворює символьні рядки, що містять цифри, у числа.

У запропонованому прикладі функція TO_NUMBER використо-вується для перетворення числа в символьному форматі в числовий формат:

SQL> ------------------

SQL> -- Вправа №43

SQL> ------------------

SQL> SELECT служ_номер, служ_имя, должность, оклад

2

FROM служ

 

 

 

3

WHERE оклад > TO_NUMBER('1500');

 

СЛУЖ_НОМЕР СЛУЖ_ИМЯ ДОЛЖНОСТЬ

ОКЛАД

----------------------

-----------------

 

--------------------

---------

 

7499

Иванова

реализатор

1600

 

7566

Гончаров

менеджер

2975

 

7698

Головко

менеджер

2850

 

7782

Шевченко

менеджер

2450

 

7788

Мюллер

аналитик

3000

7839

Король

президент

5000

7902

Штирлец

аналитик

3000

7 строк выбрано.

Функція TO_DATE

TO_DATE( рядок [, формат ]);

Функція TO_DATE перетворює символьні рядки в датина підставі шаблона, заданого в форматі . Якщо формат не заданий, то за замовчуванням це DD-MM-YYYY (залежить від настроювань NLS).

Наприклад, щоб знайти всіх службовців, зарахованих на роботу в лютому 1999 року (Лютий, 1999 – нестандартний формат дати), можна скористатися функцією TO_DATE:

SQL> ------------------

SQL> -- Вправа №44

SQL> ------------------

SQL> SELECT служ_номер, служ_имя, оформлен

2FROM служ

3WHERE TRUNC(оформлен, 'MONTH') = TO_DATE('Февраль, 1999', 'Month, YYYY');

СЛУЖ_НОМЕР СЛУЖ_ИМЯ ОФОРМЛЕН

----------------------- ---------------- -------------------

7499

Иванова

20.02.1999

7521

Черничная

22.02.1999

Символьний рядок, трактований відповідно до маски, був перетворений в дату й рівнявся зі значеннями стовпця «оформлений» з точністю до місяця.

Функція TO_DATE часто застосовується для передачі в Oracle значень дат у нестандартному форматі. Коли заноситься дата, Oracle за замовчуванням розуміє дати у форматі DD-MM-YYYY (залежить від настроювань NLS). Якщо ви хочете ввести дату в іншому форматі, потрібно використати функцію TO_DATE для конвертування рядка в дату.

7.3.2.6. Функції для даних будь-якого типу

Функція DECODE

Функція DECODE може вважатися самою потужною функцією мови SQL. Вона виконує дії, подібні до дій умовного оператора типу «IF-THEN-

ELSE».

Синтаксис функції DECODE наступний:

DECODE ({ стовпецьвираз },

значення1 , результат1 , значення2 , результат2 , ..., результат_за_замовчуванням );

Значення { стовпцявиразу } порівнюється з кожним зі значень зі списку, і, у випадку збігу зі значенням1 , повертає як результат результат1 . Якщо жодне зі значень зі списку не відповідає значенню { стовпцявиразу }, то результатом дії функції буде результат_за _замовчуванням . Якщо при цьому значення за замовчуванням не задано, то результатом виконання функції буде NULL. Якщо як значення за замовчуванням стоїть таке ж { стовпецьвираз }, що й у першому параметрі функції, то функція не змінює значення стовпця при його

відсутності в списку значень.

 

 

 

 

Аргументи

 

 

 

Функція DECODE повинна мати як мінімум 3 параметри або

аргументи.

 

 

 

 

 

 

 

 

 

{ стовпець

вираз } –

стовпець

або вираз, що підлягає декоду-

ванню;

 

 

 

 

 

 

 

 

 

значення1

– перше

значення,

з

яким порівнюються значення

{

стовпця

виразу };

 

 

 

 

 

 

 

результат1 – результат декодування значення стовпця при його

відповідності значенню1 ;

 

 

 

 

 

 

 

пари

значенняN - результатN

 

можуть бути

задані

в будь-якій

кількості;

 

 

 

 

 

 

 

 

 

результат_за_замовчуванням

результат,

що

повертається

функцією,

якщо жодне значення зі списку не збігається зі значенням

{

стовпця

виразу }.

 

 

 

 

 

 

 

Варто звернути увагу:

 

 

 

 

 

 

{ стовпець

вираз } може бути будь-якого типу.

Значення в

списку повинні бути того ж типу, що й

{ стовпецьвираз }.

Результат, що повертає функцію, має той же тип, що й тип третього аргументу функції ( результат1 ).

У запропонованому прикладі декодуються посади «менеджер» і «реалізатор»; інші посади за замовчуванням заміняються на «невідомо».

SQL> ------------------

SQL> -- Вправа №45

SQL> ------------------

SQL> SELECT служ_имя, должность,

2

DECODE(должность,

3

'реализатор', 'РАБОЧИЙ',

4

'менеджер' , 'БОСС',

5

'неизвестно') "Новая"

6

FROM служ;

СЛУЖ_ИМЯ ДОЛЖНОСТЬ

Новая

------------------ --------------------- --------------

Сидоров

шофер

неизвестно

Иванова

реализатор

РАБОЧИЙ

Черничная

реализатор

РАБОЧИЙ

Гончаров

менеджер

БОСС

Морозов

реализатор

РАБОЧИЙ

Головко

менеджер

БОСС

Шевченко

менеджер

БОСС

Мюллер

аналитик

неизвестно

Король

президент

неизвестно

Воронина

реализатор

РАБОЧИЙ

Збруев

телохранитель неизвестно

Зайцев

повар

неизвестно

Штирлец

аналитик

неизвестно

Болотова

горничная

неизвестно

14 строк выбрано.

Щоб одержати значення бонусу для кожної категорії окладу, виконаєте команду:

SQL> ------------------

SQL> -- Вправа №46

SQL> ------------------

SQL> SELECT категория,

2

DECODE(категория,

3

'1', '15%',

4

'2', '10%',

5

'3', '8%',

6

'5%') "+"

7

FROM оклад;

КАТЕГОРИЯ +

------------------ ---

115%

210%

38%

45%

55%

Результат виконання функції DECODE повинен бути того ж типу, що й третій аргумент.

У наступному прикладі задамо службовцям різне підвищення окладу залежно від типу їхніх посад:

SQL> ------------------

SQL> -- Вправа №47

SQL> ------------------

SQL> SELECT должность, оклад,

2

 

DECODE(должность,

 

3

 

'аналитик' , оклад*1.1,

4

 

'реализатор', оклад*1.15,

5

 

'менеджер' , оклад*0.95,

6

 

 

оклад) "Новый оклад"

7

FROM служ;

 

 

ДОЛЖНОСТЬ

ОКЛАД Новый оклад

--------------------

 

 

--------- -------------------

шофер

 

1300

1300

реализатор

1600

1840

реализатор

1250

1437,5

менеджер

2975

2826,25

реализатор

1250

1437,5

менеджер

2850

2707,5

менеджер

2450

2327,5

аналитик

3000

3300

президент

5000

5000

реализатор

1500

1725

телохранитель

1100

1100

повар

950

950

аналитик

3000

3300

горничная

800

800

14 строк выбрано.

Функція NVL

NVL({

стовпець вираз }, результат );

 

Перетворить порожні значення стовпця в результат. Якщо значення

{ стовпця

виразу } не порожнє, то воно залишається без зміни. Тип

результату повинен відповідати типу { стовпця

виразу }.

Наприклад:

 

SQL>

------------------

 

SQL> --

Вправа №48

 

SQL> ------------------

SQL> SELECT оклад*12+NVL(премия,0), NVL(премия,1000),

2оклад*12+NVL(премия,0)

3FROM служ

4WHERE отдел_номер = 10;

ОКЛАД*12+NVL(ПРЕМИЯ,0) NVL(ПРЕМИЯ,1000) ОКЛАД*12+NVL(ПРЕМИЯ,0)

------------------------------------------- -------------------------- --------------------------------------

29400

1000

29400

60000

1000

60000

9600

1000

9600

Функція GREATEST

GREATEST({ стовпець1вираз1 }, { стовпець2вираз2 }, ...);

Вибирає максимальне значення зі списку в дужках. Перед проведенням порівняння всі значення аргументів, починаючи із другого, автоматично конвертуються в тип першого аргументу.

Наприклад:

SQL> ------------------

SQL> -- Вправа №49

SQL> ------------------

SQL> SELECT GREATEST(1000, 2000), GREATEST(оклад, премия)

2 FROM служ

3 WHERE отдел_номер = 30;

GREATEST(1000,2000) GREATEST(ОКЛАД,ПРЕМИЯ)

---------------------------------- ----------------------------------------

2000

1600

2000

1250

2000

1400

2000

 

2000

1500

2000

 

6 строк выбрано.

Функція LEAST

LEAST({ стовпець1вираз1 }, { стовпець2вираз2 }, ...);

Вибирає мінімальне значення зі списку в дужках. Перед проведенням порівняння всі значення аргументів, починаючи з другого, автоматично конвертуються в тип першого аргументу.

SQL> -----------------

SQL> -- Вправа №50

SQL> -----------------

SQL> SELECT LEAST(1000, 2000), LEAST(оклад, премия)

2FROM служ

3WHERE отдел_номер = 30;

LEAST(1000,2000) LEAST(ОКЛАД,ПРЕМИЯ)

--------------------------- ----------------------------------

1000

300

1000

500

1000

1250

1000

 

1000

0

1000

 

6 строк выбрано.

Функція VSIZE

GREATEST({ стовпецьвираз });

Видає кількість байтів, що використовується для зберігання в пам'яті значення стовпця.

SQL>

------------------

SQL> --

Вправа №51

SQL> ------------------

 

SQL> SELECT отдел_номер, VSIZE(отдел_номер), VSIZE(оформлен),

2

VSIZE(оклад), VSIZE(служ_имя)

3FROM служ

4WHERE отдел_номер = 10;

ОТДЕЛ_НОМЕР VSIZE(ОТДЕЛ_НОМЕР) VSIZE(ОФОРМЛЕН) VSIZE(ОКЛАД) VSIZE(СЛУЖ_ИМЯ)

---------------------- ---------------------------------- ---------------------------- --------------------- ---------------------------

10

2

7

3

8

10

2

7

2

6

10

2

7

2

8

Ще раз про вкладеність функцій

Варто запам'ятати, що функції можуть бути вкладені одна в одну будь-яке число раз, виконання функцій ведеться від внутрішніх рівнів вкладеності до зовнішнього. Важливо при цьому правильно розставити дужки й вести облік їхньої кількості: число дужок, що відкривається, повинне збігатися з числом дужок, що закривається.

У запропонованому прикладі містяться вкладені функції:

SQL> ------------------

SQL> -- Вправа №52

SQL> ------------------

SQL> SELECT служ_имя, NVL(TO_CHAR(менеджер), 'без менеджера')

2FROM служ

3WHERE менеджер IS NULL;

СЛУЖ_ИМЯ NVL(TO_CHAR(МЕНЕДЖЕР),'БЕЗМЕНЕДЖЕРА')

------------------ ----------------------------------------------------------------------

Король без менеджера

1.Значення стовпця «менеджер» конвертується в символьний тип.

2.Функція NVL заміняє порожні значення стовпця «менеджер» на рядок «без менеджера». Без використання функції TO_CHAR виконання функції NVL було б неможливо, тому що тип поля «менеджер» – числовий,

азначення другого аргументу повинне бути відповідним йому за типом. Вкладені функції можуть також бути використані для одержання,

наприклад дати, що відповідає першій п'ятниці через два місяці після поточної дати, у форматі «Day dd Month YYYY».

SQL> ------------------

SQL> -- Вправа №53

SQL> ------------------

SQL> SELECT SYSDATE, TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE, 2), 'ПЯТНИЦА'),

2

'Day dd Month YYYY')

3

FROM SYS.DUAL;

SYSDATE TO_CHAR(NEXT_DAY(ADD_MONTHS(

------------------ ------------------------------------------------------

22.10.2000

Пятница 29 Декабрь 2000

1.Функція ADD_MONTHS додає два місяці до поточної дати

2.Функція NEXT_DAY визначає найближчу п'ятницю після знайденої

дати.

3. Функція TO_CHAR переводить знайдені значення в символьний рядок відповідно до маски форматування «Day dd Month YYYY».

7.3.2.7. Групові функції

Запропонований розділ демонструє, як статистична інформація (така, як середнє або сумарне значення) може бути отримана для групи рядків таблиці за допомогою так званих групових функцій. Тут буде розглянуто, як розбивати рядки таблиць на групи і як задавати критерій пошуку для груп і окремих рядків.

Групові функції оперують із набором рядків. Вони формують результати, засновані на обробці групи рядків і для цієї групи, на відміну від простих функцій, що працюють із окремими рядками. За замовчу-ванням всі рядки таблиці результатів трактуються як одна група. Щоб розбити рядки на групи, використовується команда GROUP BY, що специфікується

вкоманді SELECT.

Унаступній таблиці 7.16 наведений список групових функцій:

 

 

 

 

 

Таблиця 7.16

 

 

 

 

Групові функції

 

 

 

 

 

 

 

Функція

 

 

Значення, що повертає

 

 

 

 

 

 

 

AVG ( [{DISTINCT

ALL}] n

);

 

Середнє значення групи полів у стовпці, не

 

 

 

 

 

 

включаючи порожніх значень

 

 

 

 

 

 

COUNT ( [{DISTINCT ALL}]

 

 

Кількість рядків у групі, в яких вираз має

 

вираз

);

 

 

 

непусте значення

 

 

 

 

 

 

 

MAX ( [{DISTINCT

ALL}]

 

 

Максимальне значення виразу в групі

 

вираз

);

 

 

 

 

 

 

 

 

 

 

 

MIN ( [{DISTINCT

ALL}]

 

 

Мінімальне значення виразу в групі

 

вираз

);

 

 

 

 

 

 

 

 

 

 

STDDEV ( [{DISTINCT ALL}]

n );

 

Функція, що визначає математичне

 

 

 

 

 

 

очікування в групі