У меня есть следующий запрос, который возвращает мне таблицу:
WITH RECURSIVE EXPL (parent_node, node, filename) AS
(
SELECT ROOT.parent_node, ROOT.node, ROOT.filename
FROM filesystem ROOT
WHERE ROOT.parent_node = 1
UNION ALL
SELECT CHILD.parent_node, CHILD.node, CHILD.filename
FROM EXPL PARENT, filesystem CHILD
WHERE PARENT.node = CHILD.parent_node
)
SELECT DISTINCT parent_node, node, filename
FROM EXPL
ORDER BY parent_node, node;
END
Но я хочу функцию, которая заменяет WHERE ROOT.parent_node = 1
на WHERE ROOT.parent_node = x
.X - это целое число, являющееся параметром функции.
Я думал об этом, но это совсем не правильно:
CREATE FUNCTION childs(x INT) RETURNS TABLE
RETURN
WITH RECURSIVE EXPL (parent_node, node, filename) AS
(
SELECT ROOT.parent_node, ROOT.node, ROOT.filename
FROM filesystem ROOT
WHERE ROOT.parent_node = x
UNION ALL
SELECT CHILD.parent_node, CHILD.node, CHILD.filename
FROM EXPL PARENT, filesystem CHILD
WHERE PARENT.node = CHILD.parent_node
)
SELECT DISTINCT parent_node, node, filename
FROM EXPL
ORDER BY parent_node, node;
END;