SQL:是否重用函数返回的值?
如何重用在下面的函数中调用的SQL:是否重用函数返回的值?,sql,postgresql,variables,sql-insert,sql-function,Sql,Postgresql,Variables,Sql Insert,Sql Function,如何重用在下面的函数中调用的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 (pa
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相反的语言:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
BEGIN
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);
END
$$ LANGUAGE plpgsql;
此外,如果重用的结果是pair($1,$2)
,则可以将其存储到变量中:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
DECLARE
pair bigint := pair($1, $2);
BEGIN
INSERT INTO chats
SELECT pair, $1, $2
WHERE NOT EXISTS (SELECT 1 FROM chats WHERE id = pair);
INSERT INTO messages VALUES (pair, $1, $3);
END
$$ LANGUAGE plpgsql;
由于函数体是过程性的,因此请使用与SQL相反的语言:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
BEGIN
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);
END
$$ LANGUAGE plpgsql;
此外,如果重用的结果是pair($1,$2)
,则可以将其存储到变量中:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
DECLARE
pair bigint := pair($1, $2);
BEGIN
INSERT INTO chats
SELECT pair, $1, $2
WHERE NOT EXISTS (SELECT 1 FROM chats WHERE id = pair);
INSERT INTO messages VALUES (pair, $1, $3);
END
$$ LANGUAGE plpgsql;
由于函数体是过程性的,因此请使用与SQL相反的语言:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
BEGIN
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);
END
$$ LANGUAGE plpgsql;
此外,如果重用的结果是pair($1,$2)
,则可以将其存储到变量中:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
DECLARE
pair bigint := pair($1, $2);
BEGIN
INSERT INTO chats
SELECT pair, $1, $2
WHERE NOT EXISTS (SELECT 1 FROM chats WHERE id = pair);
INSERT INTO messages VALUES (pair, $1, $3);
END
$$ LANGUAGE plpgsql;
由于函数体是过程性的,因此请使用与SQL相反的语言:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
BEGIN
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);
END
$$ LANGUAGE plpgsql;
此外,如果重用的结果是pair($1,$2)
,则可以将其存储到变量中:
CREATE FUNCTION messages_add(bigint, bigint, text) RETURNS void AS $$
DECLARE
pair bigint := pair($1, $2);
BEGIN
INSERT INTO chats
SELECT pair, $1, $2
WHERE NOT EXISTS (SELECT 1 FROM chats WHERE id = pair);
INSERT INTO messages VALUES (pair, $1, $3);
END
$$ LANGUAGE plpgsql;
pair(4,5)
。看pair(4,5)
。看pair(4,5)
。看pair(4,5)
。看谢谢,克洛多尔多!但是,我希望它插入到
消息中
,即使该行已经存在于聊天中
,以便您可以将多条消息添加到一个聊天中。我所说的聊天,是指对话或线程。谢谢,克洛多尔多!但是,我希望它插入到消息中
,即使该行已经存在于聊天中
,以便您可以将多条消息添加到一个聊天中。我所说的聊天,是指对话或线程。谢谢,克洛多尔多!但是,我希望它插入到消息中
,即使该行已经存在于聊天中
,以便您可以将多条消息添加到一个聊天中。我所说的聊天,是指对话或线程。谢谢,克洛多尔多!但是,我希望它插入到消息中
,即使该行已经存在于聊天中
,以便您可以将多条消息添加到一个聊天中。聊天,我指的是对话或线程。为什么使用PL/pgSQL作为过程的函数体有好处?@MattDiPasquale:PL代表过程语言,它提供了SQL在变量和执行控制方面所缺乏的东西。SQL作为func语言的优点是可以内联单个选择,但它不适用于两个插入的情况。为什么函数体是使用PL/pgSQL的过程优点?@MattDiPasquale:PL代表过程语言,它提供了SQL在变量和执行控制方面所缺少的东西。SQL作为func语言的优点是可以内联单个选择,但它不适用于两个插入的情况。为什么函数体是使用PL/pgSQL的过程优点?@MattDiPasquale:PL代表过程语言,它提供了SQL在变量和执行控制方面所缺少的东西。SQL作为func语言的优点是可以内联单个选择,但它不适用于两个插入的情况。为什么函数体是使用PL/pgSQL的过程优点?@MattDiPasquale:PL代表过程语言,它提供了SQL在变量和执行控制方面所缺少的东西。SQL作为func语言的优点是可以内联单个选择,但它不适用于两个插入的情况。