Створення та використання функції в базі даних 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 надає обидві версії цих функцій.