Sql 将这些查询组合成一个返回
我有几个查询,我正试图将它们组合成一个函数,返回一些值。除了我不知道怎么做才对 这是我试图输出的逻辑:Sql 将这些查询组合成一个返回,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我有几个查询,我正试图将它们组合成一个函数,返回一些值。除了我不知道怎么做才对 这是我试图输出的逻辑: if((SELECT parent_id FROM event_comments WHERE comment_id = $1) == null){ WITH cte AS (DELETE FROM event_comments WHERE thread_id = '1BZbAR' RETURNING parent_id, comment_id, thread_id)
if((SELECT parent_id FROM event_comments WHERE comment_id = $1) == null){
WITH cte AS (DELETE FROM event_comments WHERE thread_id = '1BZbAR'
RETURNING parent_id, comment_id, thread_id)
SELECT parent_id, comment_id, thread_id
FROM cte
WHERE parent_id IS NULL;
}else{
DELETE FROM event_comments WHERE comment_id = $1 AND created_by = $3
returning parent_id, comment_id, thread_id
}
获取语法错误类型“cte”不存在
CREATE FUNCTION deleteComment(comment_id integer, created_by UUID, thread_id integer)
RETURNS cte AS $$
BEGIN
CASE WHEN (SELECT parent_id FROM event_comments WHERE comment_id = $1) is NULL
THEN
WITH cte AS (
DELETE FROM event_comments WHERE thread_id = $3
RETURNING parent_id, comment_id, thread_id
)
SELECT parent_id, comment_id, thread_id
FROM cte
WHERE parent_id IS NULL;
ELSE
WITH cte AS (
DELETE FROM event_comments WHERE comment_id = $1 AND created_by = $2
returning parent_id, comment_id, thread_id
)
END; $$
LANGUAGE plpgsql;
在plpgsql函数中,您必须准确地指定返回的内容,并且
cte
不是数据类型,而是函数中使用的变量。也就是说,您应该首先声明要返回的列及其数据类型。如果愿意,您可以自己创建数据类型,但最简单的方法是返回一个表:
CREATE OR REPLACE FUNCTION
deleteComment(comment_id_in INT, created_by_in UUID, thread_id_in INT)
RETURNS TABLE (parent_id_out INT, comment_id_out INT, thread_id_out INT) AS $$
BEGIN
IF (SELECT parent_id FROM event_comments WHERE comment_id = $1) IS NULL THEN
RETURN QUERY DELETE FROM event_comments
WHERE thread_id = $3
RETURNING parent_id, comment_id, thread_id;
ELSE
RETURN QUERY DELETE FROM event_comments
WHERE comment_id = $1 AND created_by = $2
RETURNING parent_id, comment_id, thread_id;
END IF;
END;
$$ LANGUAGE plpgsql;
样本数据:
CREATE TEMPORARY TABLE event_comments
(comment_id INT, parent_id INT, thread_id INT, created_by UUID);
INSERT INTO event_comments VALUES (1,1,1,'123e4567-e89b-12d3-a456-426655440000');
测试:
SELECT * FROM deleteComment(1,'123e4567-e89b-12d3-a456-426655440000',4);
parent_id_out | comment_id_out | thread_id_out
---------------+----------------+---------------
1 | 1 | 1
(1 Zeile)
查看更紧凑的示例