所以我最近开始使用 postgres。而且由于我无法执行“IF else”,除非在一个函数中我很好奇哪个是更好的资源明智和性能明智。1. 创建如下函数来查询存储id的数据库。检查 id 是否为 null,如果它是插入则返回 id;
CREATE OR REPLACE FUNCTION getallfoo() RETURN INT AS
$BODY$
DECLARE
id INTEGER := (SELECT id FROM foo where (lots of condition checks 15+);
BEGIN
IF id is null then
INSERT INTO foo(a,b,c,d,e,f) SELECT (1,2,3,4,5,6) RETURNING id INTO id;
return id;
ELSE
RETURN id;
END IF;
END;
$BODY$
Language 'plpgsql';
select * from getallfoo();
或 2:首先尝试插入数据库,执行如下操作。假设插入失败,然后查询数据库。我有理由先进行插入,这不是这个问题的重点。我知道大多数人会说先查询,然后如果不存在插入。
INSERT INTO foo (a,b,c,d,e,f, ........, 15+) SELECT (1,2,3,4,5,6, ........., 15+)
WHERE NOT EXIST(SELECT 1 from foo where a=1, b=2, c=3, up to 15);
因为我在java中工作,所以我会检查 rs.getGeneratedKeys() = 0; 如果插入失败,我将重新查询数据库以获取 id;
SELECT id from foo where a=1, b=2, c=3, ect;
所以问题是因为我在查询中的条件检查很长,创建一个函数并查询一次数据库是否更好。或者只是跳过该功能并查询两次。我在大约 50 个不同的表上进行这些类型的插入。
附带的问题是你可以使用preparedStatement(上述函数)ResultSet rs = ps.executeUpdate()在java中创建一个函数吗?