Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ SQL\T-SQL ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

FreeBSD and Nix

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


PostgreSQL: Конструкция With (вызов рекурсии)


Очень простой пример вызова рекурсии с помощью конструкции With в PostgreSQL:

WITH RECURSIVE rec AS (
    --начало рекурсии (по сути якорь)
    SELECT   1 AS i,    1 AS factorial
    
    UNION  
    
    --логическая часть рекурсии  
    SELECT   i+1 AS i,     factorial * (i+1) as factorial 
    FROM r
    WHERE i  <  7
)

SELECT * FROM rec;

 

Живой пример из хранимой функции:

CREATE OR REPLACE FUNCTION GetCategory (p_start_id INT) 
RETURNS TABLE (name VARCHAR(100))
AS $$
WITH RECURSIVE c
AS
(
SELECT id, parent_id, name, 1 AS depth
FROM categories
WHERE Id = p_start_id
 
UNION ALL
 
SELECT cat.id, cat.parent_id, cat.name, c.depth + 1 AS Level
FROM categories cat
INNER JOIN c ON cat.Id = c.parent_id
)
SELECT name
FROM c
ORDER BY depth DESC;
$$ LANGUAGE sql;
 
 
SELECT GetCategory(51);

Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект