例如,在MS-SQL中,您可以打开查询窗口并运行以下命令:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT *
FROM dbo.PubLists
WHERE Name = @List
Run Code Online (Sandbox Code Playgroud)
如何在PostgreSQL中完成?可以吗?
这样的事情可能吗?
INSERT INTO Table2 (val)
VALUES ((INSERT INTO Table1 (name) VALUES ('a_title') RETURNING id));
Run Code Online (Sandbox Code Playgroud)
比如使用返回值作为值来在第二个表中插入一行并引用第一个表?
该指令有效:
SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination)
FROM road
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));
Run Code Online (Sandbox Code Playgroud)
但我想用这种方式:
SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination), lengths array_agg(length)
FROM road
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));
Run Code Online (Sandbox Code Playgroud)
如何只使用一个"SELECT INTO"指令来设置多个变量?
我目前正在学习很多 PostgreSQL,尤其PLPGSQL是在处理函数中的查询结果方面很挣扎。我想围绕用户表创建一个包装器,稍后使用结果然后返回它。在我的情况下,用户和帐户是两个不同的表,我想一次性创建它。
我的第一个也是天真的方法是构建以下内容:
CREATE OR REPLACE FUNCTION schema.create_user_with_login (IN email varchar, IN password varchar, IN firstname varchar DEFAULT NULL, IN surname varchar DEFAULT NULL)
RETURNS schema.user
LANGUAGE plpgsql
VOLATILE
RETURNS NULL ON NULL INPUT
AS
$$
declare
created_user schema."user";
begin
INSERT INTO schema."user" ("firstname", "surname", "email")
VALUES (firstname, surname, email)
RETURNING * INTO created_user;
// [...] create accounts and other data using e.g. created_user.id
// the query should return the initially created user
RETURN created_user
end;
$$;
Run Code Online (Sandbox Code Playgroud)
这种方法不起作用,因为 …
如何转换integer[]为jsonb?
declare ids int[];
declare jsonids jsonb;
jsonids := array(select id from student); -- what should I do here?
Run Code Online (Sandbox Code Playgroud)