【发布时间】:2020-08-09 14:10:24
【问题描述】:
PostgreSQL 11.1
我有一个程序定义为:
FUNCTION Copy_Name( to_keep_id integer, to_delete_id integer, parent_table text) RETURNS VOID
我可以将它与 cte 一起使用吗:
WITH _in (to_keep_name, to_del_name) AS (
VALUES ('tom', 'bob')
),
_to (keep_name_id, del_name_id) AS (
SELECT keep_name.id, del_name.id
FROM _in
JOIN tempA keep_name ON (keep_name.name = _in.to_keep_name)
JOIN tempA del_name ON (del_name.name = _in.to_del_name)
)
SELECT *
FROM _to
JOIN LATERAL Copy_Name(_to.keep_name_id, _to.del_name_id, 'tempA') ON true;
是否有用于连接过程的首选语法?
【问题讨论】:
-
你的函数返回
VOID。为什么要在查询中使用它?这似乎没什么用。 -
@GordonLinoff 只是试图在 cte 旁边运行存储过程。 (顺便说一句,它确实有效)。注意:存储过程对相关文件进行操作。我不需要任何输出。
-
@GordonLinoff:在查询中使用这样的函数是有意义的,用查询产生的值调用它 N 次。这有点滥用 SQL 的副作用,但它确实有效。问题中的其他几件事没有意义。
标签: sql postgresql function join lateral-join