Створення та використання функції в базі даних Azure для PostgreSQL
Ми вже дізналися, що PostgreSQL підтримує різні мови. Функції можна класифікувати за чотирма різними типами:
- Функції, написані в SQL.
- Процедурні мовні функції, написані підтримуваною процедурними мовами, як-от PL.pgSQL.
- Внутрішні функції.
- Функції C-language.
Крім того, призначення функції також можна класифікувати як мінливі, незмінніабо стабільні.
мінлива функція (стандартна) може змінювати базу даних і не обов'язково повертати однаковий результат із однаковими вхідними параметрами щоразу. Отже, щоразу, коли викликається ця функція, її потрібно переоцінити.
стабільна функція не може змінити базу даних і повертає той самий результат, якщо передано ті самі аргументи та виконуються в межах однієї інструкції. Якщо ця функція викликається кілька разів, оптимізатор запитів може використовувати результати з моменту останнього виклику.
Функція незмінною не може змінити базу даних і повертає ті самі результати, якщо передали ті самі аргументи, незалежно від запиту, який її викликає.
Волатильність функції робить велику різницю в ефективності, з якою оптимізатор запитів обробляє її.
Створення функції
Функція повертає одне значення, яке можна використовувати в інструкції SELECT.
Синтаксис для створення функції:
CREATE [OR REPLACE] FUNCTION
myfunction ([inputparam] type {default})
RETURNS returntype AS
$$
SQL body
$$
LANGUAGE 'language_name';
CREATE FUNCTION
Як і в збережених процедурах, символ $$ використовується для запуску та завершення рядка.
Функції приймають такі параметри:
- ім'я – за потреби додайте ім'я схеми.
- argmode – режим аргументу. Може бути IN, OUT, INOUT або VARIADIC. Стандартне значення – IN. VARDIAC – це невизначена кількість вхідних аргументів одного типу, і після цього йдуть аргументи OUT. Аргументи OUT і INOUT не можна використовувати разом із нотаціями RETURNS TABLE.
- argname – ім'я аргументу.
- argtype – тип даних аргументу. Може бути базовим, складеним або доменним типом або посилатися на тип стовпця таблиці. Тип стовпця записується як table_name.ім'я_стовпця%TYPE. Цей тип даних може допомогти зробити функцію незалежною від змін визначення таблиці.
- t_expr – значення за промовчанням (того самого типу), якщо параметр не вказано. Значення за промовчанням мають лише параметри IN і INOUT. Параметри вводу після параметра зі значенням за промовчанням також мають мати значення за промовчанням.
- rettype – тип даних, що повертається, який може бути базовим, складеним або доменним типом або посилатися на тип стовпця таблиці. Якщо функція не повертає значення, укажіть тип повернення як недійсний. Якщо є параметри OUT або INOUT, речення RETURNS можна пропустити. Якщо він присутній, він повинен погодитися з типом результату, який мається на увазі в параметрах виводу: RECORD, якщо є кілька параметрів виводу або той самий тип, що й параметр єдиного виводу. Модифікатор SETOF означає, що функція повертає набір елементів, а не один елемент. Тип стовпця посилається на запис table_name.
- column_name – ім'я стовпця виводу в синтаксисі RETURNS TABLE. Цей параметр оголошує іменований параметр OUT, за винятком того, що функція RETURNS TABLE також має на увазі функція RETURNS SETOF.
- column_type – тип даних стовпця виводу в синтаксисі RETURNS TABLE.
- lang_name – мову, що використовується для написання процедури. За замовчуванням використовується значення SQL, якщо вказано sql_body. Може бути sql, c, внутрішній або ім'я визначеної користувачем процедурної мови, наприклад plpgsql.
Використовуйте ключові слова IMMUTABLE, STABLE або VOLATILE як підказку для оптимізатора запитів про функцію. ЗМІННА – це стандартне значення.
Виклик функції
Функцію можна використовувати в запиті, передаючи до неї будь-які відповідні параметри. Наприклад:
SELECT myfunction(3), CatID, CatName
FROM myCats
Вбудовані функції
PostgreSQL містить багато вбудованих функцій, які можна використовувати в запитах. Ці статті охоплюють порівняння, агрегування даних, математичні функції тощо. Перегляньте онлайнову документацію повний список функцій PostgreSQL.
Приклад вбудованої функції рядка – підрядок.
substring (*string* text [ FROM *start* integer ] [ FOR *count* integer ] ) → text
Ця функція займає три параметри вводу:
- Рядок (введіть текст)
- FROM start (введіть ціле число)
- ДЛЯ підрахунку (ціле число)
Підрядок повертає частину вхідного тексту, починаючи з початку символу, і зупиняється після підрахунок символів. Наприклад:
substring('Thomas' from 2 for 3) → hom
substring('Thomas' from 3) → omas
substring('Thomas' for 2) → Th
Ця функція така сама, як і підрядок:
substr ( *string* text, *start* integer [, *count* integer ] ) → text
substr('alphabet', 3) → phabet
substr('alphabet', 3, 2) → ph
Примітка
Якщо ви знайомі з функціями, ви помітите, що в першій версії використовуються ключові слова, а не коми для відокремлення аргументів. PostgreSQL надає обидві версії цих функцій.