Tôi có hàm PL/pgSQL này phải trả về một số thông tin người dùng.Các hàm PL/pgSQL: Cách trả về bảng với câu lệnh thực thi
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;
Vấn đề tôi đang phải đối mặt là kết quả của hàm là một cột bảng duy nhất như thế này:
╔═══╦═════════════════════╗
║ ║my_function ║
╠═══╬═════════════════════╣
║ 1 ║ (106,Ned,STARK) ║
║ 2 ║ (130,Rob,STARK) ║
╚═══╩═════════════════════╝
Trong khi tôi mong đợi:
╔═══╦════════════╦════════════╦═════════════╗
║ ║ id ║ firstname ║ lastname ║
╠═══╬════════════╬════════════╬═════════════╣
║ 1 ║ 106 ║ Ned ║ STARK ║
║ 2 ║ 103 ║ Rob ║ STARK ║
╚═══╩════════════╩════════════╩═════════════╝
Tôi nghĩ (nhưng không chắc chắn) vấn đề xuất phát từ tuyên bố EXECUTE
, nhưng tôi không thể xem cách thực hiện khác.
Bất kỳ ý tưởng nào?
Bạn đang gọi hàm với 'SELECT my_function (123);' hoặc 'SELECT FROM my_function (123);'? –
Bạn hoàn toàn đúng, tôi đã thực hiện chức năng với SELECT my_function (123); nó hoạt động hoàn hảo với TỪ ... Cảm ơn bạn! – Getz