简化PostgreSQL函数
我有一个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
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。