Sql

Pl pgsql: PostgreSQL : Документация: 9.6: Глава 41. PL/pgSQL — процедурный язык SQL : Компания Postgres Professional

PSQL-01. Основы PL/pgSQL — курсы в Санкт-Петербурге

Целью реализации программы (учебного модуля) «PSQL-01. Основы PL/pgSQL» является формирование у слушателей специальных знаний и компетенций, необходимых для разработки программных модулей в базах данных PostgreSQL на основе использования языков SQL и PL/pgSQL.


В результате освоения модуля обучающийся должен уметь:

• использовать различные типы данных и функции в запросах SQL и PL/pgSQL;

• создавать функции и триггера на языке PL/pgSQL;

• конструировать код запросов динамически из кода приложения;

• работать с курсорами;

• работать с массивами;

• настраивать триггеры, проводить перехват ошибок в исполняемом коде. 

В результате освоения модуля обучающийся должен знать:

• преимущества использования PL/pgSQL;

• основы языка PL/pgSQL;

• встроенные функции PostgreSQL;

• поддерживаемые типы данных аргументов и возвращаемых значений.

В результате освоения модуля обучающийся должен приобрести практический опыт:

• использования различных типов данных и функций в запросах SQL и PL/pgSQL;

• разработки и отладки блоков кода на языке PL/pgSQL.

Тема 1. Основы языка PL/pgSQL

1.1 PL/pgSQL — процедурный язык SQL

Введение в язык PL/pgSQL. 

Общие сведения о процедурных языках. 

Работа с переменными и выражениями. 

Основные операторы.

1.2 Управляющие структуры

Блоки и их структура. 

Условные операторы. 

Простые циклы. 

Цикл по результатам запроса

1.3 Пользовательские функции

Использование функций в PL/pgSQL. 

Создание пользовательских функций. 

Объявление параметров функции. 

Практические занятия

Написание функций в PL/pgSQL

Тема 2. Работа с запросами SQL в PL/pgSQL

2.1 SQL-операторы и выражения внутри функции на PL/pgSQL

Выполнение инструкций SQL. 

Подстановка переменных. 

Использование табличных функций.

Практические занятия

Использование запросов в блоках PL/pgSQL

Тема 3. Использование курсоров в PL/pgSQL

3.1 Введение в курсоры

Общие сведения о курсорах.  

Объявление курсорных переменных. 

Открытие курсора. 

3.2 Работа с курсорами

Использование курсоров для обработки данных. 

Операции с курсорами. 

Обработка курсора в цикле

Практические занятия

Работа с курсорами

Тема 4. Динамическое построение запросов

4.1 Динамические запросы

Назначение и возможности динамических запросов. 

Выполнение динамического запроса. 

Конструкции динамических запросов

Практические занятия

Динамические запросы

Тема 5. Работа с массивами

5.1 Работа с массивами

Общие сведения о массивах. 

Использование функций для обработки массивов. 

Работа с массивами средствами PL/pgSQL. 

Цикл по элементам массива

Практические занятия

Работа с массивами

Тема 6. Исключения: перехват ошибок

6.1 Сообщения и ошибки

Необходимость работы с исключениями. 

Вывод сообщений и ошибок. 

Перехват ошибок.  

Журналирование ошибок. 

Уровни обработки ошибок

Практические занятия

Работа с исключениями

Тема 7. Использование триггеров

7.1 Триггеры при изменении данных

Общие сведения о триггерах. 

Функции-обработчики триггеров. 

Динамическая компиляция пользовательских функций на языке PL/pgSQL | ДЖИДЖОЕВ

1. PostgreSQL official site. Available at: https://www.postgresql.org/, accessed: 20.10.2020.

2. Karthik Ramachandra, Kwanghyun Park, K. Venkatesh Emani, Alan Halverson, César A. Galindo-Legaria, Conor Cunningham Froid. Optimization of Imperative Programs in a Relational Database. Proceedings of the VLDB Endowment, vol. 11, no. 4, 2017, pp. 432-444.

3. Christian Duta, Denis Hirn, and Torsten Grust. Compiling PL/SQL Away. In Proc. of the 10th Annual Conference on Innovative Data Systems Research (CIDR’20), 2020, 8 p.

4. Denis Hirn and Torsten Grust. PL/SQL Without the PL. In Proc. of the 2020 ACM SIGMOD International Conference on Management of Data (SIGMOD’20), 2020, pp. 2677–2680.

5. PL/pgSQL – SQL Procedural Language. Available at: https://www.postgresql.org/docs/9.6/plpgsql-overview.html, accessed: 20.10.2020

6. The LLVM Compiler Infrastructure. Available at: http://llvm.org/, accessed: 20.10.2020.

7. Шарыгин Е.Ю., Бучацкий Р.А., Скворцов Л.В., Жуйков Р.А., Мельник Д.М. Динамическая компиляция выражений в SQL-запросах для СУБД PostgreSQL. Труды ИСП РАН, том 28, вып. 4, 2016 г., стр. 217-240. DOI: 10.15514/ISPRAS-2016-28(4)-13 / Sharygin E.Y., Buchatskiy R.A., Skvortsov L.V., Zhuykov R.A., Melnik D.M. Dynamic compilation of expressions in SQL queries for PostgreSQL. Trudy ISP RAN/Proc. ISP RAS, vol. 28, issue 4, 2016. pp. 217-240 (in Russian).

8. Бучацкий Р.А., Шарыгин Е.Ю., Скворцов Л.В., Жуйков Р.А., Мельник Д.М., Баев Р.В. Динамическая компиляция SQL-запросов для СУБД PostgreSQL. Труды ИСП РАН, том 28, вып. 6, 2016, стр. 37-48. DOI: 10.15514/ISPRAS-2016-28(6)-3 / Buchatskiy R.A., Sharygin E.Y., Skvortsov L.V., Zhuykov R.A., Melnik D. M., Baev R.V. Dynamic compilation of SQL queries for PostgreSQL. Trudy ISP RAN/Proc. ISP RAS, vol. 28, issue 6, 2016, pp. 37-48 (in Russian).

9. E. Sharygin, R. Buchatskiy, R. Zhuykov, and A. Sher. Runtime specialization of postgresql query executor. Lecture Notes in Computer Science, vol. 11, 2018, pp. 375–386.

10. Пантилимонов М.В., Бучацкий Р.А., Жуйков Р.А. Кэширование машинного кода в динамическом компиляторе SQL-запросов для СУБД PostgreSQL. Труды ИСП РАН, том 32, вып. 1, 2020, стр. 205-220. DOI: 10.15514/ISPRAS-2020-32(1)-11 / Pantilimonov M.V., Buchatskiy R.A., Zhuykov R.A. Machine code caching in PostgreSQL query JIT-compiler. Trudy ISP RAN/Proc. ISP RAS, vol. 32, issue 1, 2020. pp. 205-202 (in Russian).

11. ISP RAS website. Available at: https://www.ispras.ru/en/, accessed: 20.10.2020.

12. Graefe G. Volcano – an extensible and parallel query evaluation system. IEEE Transactions on Knowledge and Data Engineering, vol. 6, no. 1, 1994, pp. 120-135.

13. Perf profiler website. Available at: https://perf.wiki.kernel.org/index.php/Main_Page, accessed: 20.10.2020.

14. PostgreSQL SPI Memory Management. Available at: https://www.postgresql.org/docs/9.6/spi-memory.html, accessed: 20.10.2020.

15. PLV8 – A Procedural Language in Javascript powered by V8. Available at: https://github.com/plv8/plv8, accessed: 20.10.2020.

16. PL/Python – Python Procedural Language. Available at: https://www.postgresql.org/docs/9.6/plpython.html, accessed: 20.10.2020.

17. PL/Perl – Perl Procedural Language, Available at: https://www.postgresql.org/docs/9.6/plperl.html, accessed: 20.10.2020.

Глава 43. PL/pgSQL — процедурный язык SQL

10 ноября 2022 г.: Выпущены версии PostgreSQL 15.1, 14.6, 13.9, 12.13, 11.18 и 10.23!

Документация → PostgreSQL 15

Поддерживаемые версии: Текущий (15) / 14 / 13 / 12 / 11

Разрабатываемые версии: devel

Неподдерживаемые версии: 10 / 9,6 / 9,5 / 9.

4 / 9.3 / 9.2 / 9.1 / 9,0 / 8.4 / 8.3 / 8.2 / 8.1 / 8,0 / 7.4 / 7.3 / 7.2 / 7.1

Содержание

43.1. Обзор
43. 1.1. Преимущества использования PL/pgSQL
43.1.2. Поддерживаемые типы данных аргументов и результатов
43.2. Структура PL/pgSQL
43.3. Объявления
43.3.1. Объявление параметров функции
43.3.2. Псевдоним
43.3.3. Типы копирования
43.3.4. Типы строк
43.3.5. Типы записей
43.3.6. Сопоставление переменных PL/pgSQL
43.4. Выражения
43.5. Основные положения
43.5.1. Назначение
43.5.2. Выполнение команд SQL
43.5.3. Выполнение команды с однострочным результатом
43.5.4. Выполнение динамических команд
43.5.5. Получение статуса результата
43.5.6. Ничего не делать вообще
43. 6. Конструкции управления
43.6.1. Возвращение с мероприятия
43.6.2. Возвращение с процедуры
43.6.3. Вызов процедуры
43.6.4. Условные обозначения
43.6.5. Простые петли
43.6.6. Перебор результатов запроса
43.6.7. Перебор массивов
43.6.8. Перехват ошибок
43.6.9. Получение информации о месте выполнения
43.7. Курсоры
43.7.1. Объявление переменных курсора
43.7.2. Курсоры открытия
43.7.3. Использование курсоров
43.7.4. Перебор результата курсора
43.8. Управление транзакциями
43.9. Ошибки и сообщения
43.9.1. Отчеты об ошибках и сообщениях
43. 9.2. Проверка утверждений
43.10. Триггерные функции
43.10.1. Триггеры при изменении данных
43.10.2. Триггеры событий
43.11. PL/pgSQL под капотом
43.11.1. Замена переменной
43.11.2. Кэширование плана
43.12. Советы по разработке на PL/pgSQL
43.12.1. Обработка кавычек
43.12.2. Дополнительные проверки во время компиляции и во время выполнения
43.13. Перенос с Oracle PL/SQL
43.13.1. Примеры портирования
43.13.2. Что еще стоит посмотреть для
43.13.3. Приложение

PostgreSQL: Документация: 15: 43.2. Структура PL/pgSQL

Функции, написанные на PL/pgSQL, определяются для сервера выполнением команд CREATE FUNCTION. Такая команда обычно выглядит, скажем, как

.
СОЗДАТЬ ФУНКЦИЮ somefunc(integer, text) ВОЗВРАЩАЕТ целое число
AS '  основной текст функции   '
ЯЗЫК plpgsql;
 

Тело функции представляет собой просто строковый литерал, если это касается CREATE FUNCTION . Часто бывает полезно использовать долларовые кавычки (см. раздел 4.1.2.4) для написания тела функции, а не обычный синтаксис одинарных кавычек. Без долларовых кавычек любые одинарные кавычки или обратные косые черты в теле функции должны быть экранированы путем их удвоения. Почти во всех примерах в этой главе для тел функций используются литералы в долларовых кавычках.

PL/pgSQL — это язык с блочной структурой. Полный текст тела функции должен быть блок . Блок определяется как:

[ <<   этикетка   >> ]
[ ЗАЯВИТЬ
       декларации   ]
НАЧИНАТЬ
       отчеты  
КОНЕЦ [   метка   ];
 

Каждое объявление и каждый оператор в блоке завершается точкой с запятой. Блок, который появляется внутри другого блока, должен иметь точку с запятой после END , как показано выше; однако последний END , который завершает тело функции, не требует точки с запятой.

Совет

Распространенной ошибкой является написание точки с запятой сразу после BEGIN . Это неверно и приведет к синтаксической ошибке.

Метка необходима только в том случае, если вы хотите идентифицировать блок для использования в операторе EXIT или уточнить имена переменных, объявленных в блоке. Если метка указана после END , она должна совпадать с меткой в ​​начале блока.

Все ключевые слова нечувствительны к регистру. Идентификаторы неявно преобразуются в нижний регистр, если они не заключены в двойные кавычки, как и в обычных командах SQL.

Комментарии в коде PL/pgSQL работают так же, как и в обычном SQL. Двойной тире ( -- ) начинает комментарий, который продолжается до конца строки. /* начинает комментарий к блоку, который распространяется на совпадающее вхождение */ . Блочные комментарии гнездятся.

Любой оператор в разделе операторов блока может быть подблоком . Подблоки можно использовать для логической группировки или для локализации переменных в небольшой группе операторов. Переменные, объявленные в подблоке, маскируют любые одноименные переменные внешних блоков на время действия подблока; но вы все равно можете получить доступ к внешним переменным, если вы уточните их имена с помощью метки их блока. Например:

СОЗДАТЬ ФУНКЦИЮ somefunc() ВОЗВРАЩАЕТ целое число КАК $$
<< внешний блок >>
ЗАЯВИТЬ
    целое число := 30;
НАЧИНАТЬ
    ПОДНЯТЬ УВЕДОМЛЕНИЕ 'Количество здесь %', количество; -- Печатает 30
    количество := 50;
    --
    -- Создать подблок
    --
    ЗАЯВИТЬ
        целое количество := 80;
    НАЧИНАТЬ
        ПОДНЯТЬ УВЕДОМЛЕНИЕ 'Количество здесь %', количество; -- Печатает 80
        RAISE NOTICE 'Внешнее количество здесь %', externalblock.
			

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *