【发布时间】:2014-09-25 14:05:32
【问题描述】:
我有一个包含以下代码的 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?是否可以在some_id 中插入一些东西而
RETURN QUERY?
【问题讨论】:
-
您可以在较新的版本中使用
RETURN QUERY EXECUTE ...,并使用使用format和字符串连接创建的动态SQL 字符串来执行此操作。 -
你的
DELETE语句永远不会被执行,因为你的两个IF分支都有一个RETURN语句。 -
@pozs: 否。
RETURN QUERY不会退出函数(与RETURN不同)。 -
@CraigRinger:这里不需要
EXECUTE。没有什么动态的,只有两种情况。 -
@ErwinBrandstetter 当然,我的错。那只是愚蠢的语法高亮,不强调
QUERY——RETURN QUERY真的不退出。
标签: sql postgresql stored-procedures plpgsql sql-delete