【发布时间】:2014-04-20 04:08:18
【问题描述】:
-
如何复用下面函数中调用
pair返回的值?CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$ INSERT INTO chats SELECT pair($1, $2), $1, $2 WHERE NOT EXISTS (SELECT 1 FROM chats WHERE id = pair($1, $2)); INSERT INTO messages VALUES (pair($1, $2), $1, $3); $$ LANGUAGE SQL;我知道SQL query language doesn't support storing simple values in variables 是一种典型的编程语言。所以,我查看了
WITHQueries (Common Table Expressions),但我不确定是否应该使用WITH,无论如何,我无法弄清楚我正在做的事情的正确语法。 这是我的SQLFiddle 和我关于storing chats & messages in PostgreSQL 的原始问题。这个函数inserts-if-not-exists 然后插入。我没有使用事务,因为我想保持快速,并且在没有消息的情况下存储聊天并不是那么糟糕,但反过来更糟。所以,查询顺序很重要。如果有更好的处理方式,请指教。
我想重用该值主要是为了加快代码速度。但是,SQL 解释器会自动优化上面的功能吗?不过,我还是想写好,DRY 代码。
【问题讨论】:
标签: sql postgresql variables sql-insert sql-function