好像Money类型如所描述的不鼓励这里
我的应用程序需要存储货币,我应该使用哪种数据类型?数字,金钱还是FLOAT?
如何将存储在记录类型变量中的查询结果用于同一存储函数中的另一个查询?我使用Postgres 9.4.4.
用这样的表:
create table test (id int, tags text[]);
insert into test values (1,'{a,b,c}'),
(2,'{c,d,e}');
Run Code Online (Sandbox Code Playgroud)
我写了一个函数(简化),如下所示:
CREATE OR REPLACE FUNCTION func(_tbl regclass)
RETURNS TABLE (t TEXT[], e TEXT[])
LANGUAGE plpgsql AS $$
DECLARE
t RECORD;
c INT;
BEGIN
EXECUTE format('SELECT id, tags FROM %s', _tbl) INTO t;
SELECT count(*) FROM t INTO c;
RAISE NOTICE '% results', c;
SELECT * FROM t;
END
$$;
Run Code Online (Sandbox Code Playgroud)
......但没有奏效:
select func('test');
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ERROR: 42P01: relation "t" does not exist LINE 1: SELECT count(*) FROM …
我目前正在学习很多 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)
这种方法不起作用,因为 …