【发布时间】:2013-08-07 17:46:21
【问题描述】:
我有这个 PL/pgSQL 函数,它必须返回一些用户信息。
CREATE OR REPLACE FUNCTION my_function(
user_id integer
) RETURNS TABLE(
id integer,
firstname character varying,
lastname character varying
) AS $$
DECLARE
ids character varying;
BEGIN
ids := '';
--Some code which build the ids string, not interesting for this issue
RETURN QUERY
EXECUTE 'SELECT
users.id,
users.firstname,
users.lastname
FROM public.users
WHERE ids IN (' || ids || ')';
END;
$$ LANGUAGE plpgsql;
我面临的问题是函数的结果是这样的单列表:
╔═══╦═════════════════════╗
║ ║my_function ║
╠═══╬═════════════════════╣
║ 1 ║ (106,Ned,STARK) ║
║ 2 ║ (130,Rob,STARK) ║
╚═══╩═════════════════════╝
正如我所料:
╔═══╦════════════╦════════════╦═════════════╗
║ ║ id ║ firstname ║ lastname ║
╠═══╬════════════╬════════════╬═════════════╣
║ 1 ║ 106 ║ Ned ║ STARK ║
║ 2 ║ 103 ║ Rob ║ STARK ║
╚═══╩════════════╩════════════╩═════════════╝
我认为(但不确定)问题来自EXECUTE 语句,但我不知道该怎么做。
有什么想法吗?
【问题讨论】:
-
你是用
SELECT my_function(123);还是SELECT FROM my_function(123);调用函数? -
你说得对,我用 SELECT my_function(123); 执行了这个函数它与 FROM 完美配合...谢谢!
-
你是怎么把那些桌子放在那里的?
标签: postgresql function stored-procedures plpgsql psql