简化PostgreSQL函数

简化PostgreSQL函数,sql,postgresql,stored-procedures,plpgsql,sql-delete,Sql,Postgresql,Stored Procedures,Plpgsql,Sql Delete,我有一个PostgreSQL存储过程,其中包含以下代码: IF something = TRUE THEN SELECT id INTO some_id FROM some_table WHERE some conditions LIMIT 1; RETURN QUERY SELECT * FROM some_table WHERE some conditions LIMIT 1; ELSE SELECT id INTO some_id FROM some_table W

我有一个PostgreSQL存储过程,其中包含以下代码:

IF something = TRUE THEN
    SELECT id INTO some_id FROM some_table WHERE some conditions LIMIT 1;
    RETURN QUERY SELECT * FROM some_table WHERE some conditions LIMIT 1;
ELSE
    SELECT id INTO some_id FROM some_table WHERE some OTHER conditions LIMIT 1;
    RETURN QUERY SELECT * FROM some_table WHERE some OTHER conditions LIMIT 1;
END IF;

DELETE FROM some_table where id = some_id;
有没有办法简化上述代码?我想我们无能为力 关于IF和ELSE中的重复代码,但是有没有办法避免 每次都有2个SELECT?是否可以在某个id中插入某些内容
返回查询?

如果该函数只执行您发布的内容,则不需要:

delete from some_table
where 
    something and (some conditions)
    or
    something is not true and (some other conditions)
returning *

如果该功能只执行您发布的内容,则无需:

delete from some_table
where 
    something and (some conditions)
    or
    something is not true and (some other conditions)
returning *

如果该功能只执行您发布的内容,则无需:

delete from some_table
where 
    something and (some conditions)
    or
    something is not true and (some other conditions)
returning *

如果该功能只执行您发布的内容,则无需:

delete from some_table
where 
    something and (some conditions)
    or
    something is not true and (some other conditions)
returning *

您可以使用返回查询执行。。。在较新版本中,并使用通过格式和字符串连接创建的动态SQL字符串执行。删除语句永远不会执行,因为两个IF分支都有一个返回语句。@pozs:No。返回查询与RETURN不同,不会从函数中退出。@CraigRinger:不需要在此处执行。“没有什么动态,只有两个案例。”厄文布兰德斯特当然,我的错。这只是愚蠢的语法突出显示,它没有强调查询-返回查询确实不存在。您可以使用返回查询执行。。。在较新版本中,并使用通过格式和字符串连接创建的动态SQL字符串执行。删除语句永远不会执行,因为两个IF分支都有一个返回语句。@pozs:No。返回查询与RETURN不同,不会从函数中退出。@CraigRinger:不需要在此处执行。“没有什么动态,只有两个案例。”厄文布兰德斯特当然,我的错。这只是愚蠢的语法突出显示,它没有强调查询-返回查询确实不存在。您可以使用返回查询执行。。。在较新版本中,并使用通过格式和字符串连接创建的动态SQL字符串执行。删除语句永远不会执行,因为两个IF分支都有一个返回语句。@pozs:No。返回查询与RETURN不同,不会从函数中退出。@CraigRinger:不需要在此处执行。“没有什么动态,只有两个案例。”厄文布兰德斯特当然,我的错。这只是愚蠢的语法突出显示,它没有强调查询-返回查询确实不存在。您可以使用返回查询执行。。。在较新版本中,并使用通过格式和字符串连接创建的动态SQL字符串执行。删除语句永远不会执行,因为两个IF分支都有一个返回语句。@pozs:No。返回查询与RETURN不同,不会从函数中退出。@CraigRinger:不需要在此处执行。“没有什么动态,只有两个案例。”厄文布兰德斯特当然,我的错。这只是愚蠢的语法亮点,它没有强调查询-返回查询确实不存在。如果某个值可以为NULL,则使用或某个值不为TRUE,以便第二个表达式执行与上述If语句相同的操作,或者OP需要重新检查如何处理TRUE/FALSE/NULL。遗漏了something IS NULL的情况。如果某个值可以为NULL,则使用或某个值不为TRUE,以便第二个表达式执行与上述If语句相同的操作,或者OP需要重新检查如何处理TRUE/FALSE/NULL。遗漏了something IS NULL的情况。如果某个值可以为NULL,则使用或某个值不为TRUE,以便第二个表达式执行与上述If语句相同的操作,或者OP需要重新检查如何处理TRUE/FALSE/NULL。遗漏了something IS NULL的情况。如果某个值可以为NULL,则使用或某个值不为TRUE,以便第二个表达式执行与上面的If语句相同的操作,或者OP需要重新检查如何处理TRUE/FALSE/NULL。