Tôi sẽ làm nó như thế này,
SELECT *
FROM my_table
CROSS JOIN LATERAL build_details( my_table, 1000, true )
LIMIT 1;
Bạn có thể thấy điều này làm việc với một số dữ liệu mẫu dưới đây.
-- create some sample data,
CREATE TABLE foo(bar)
AS VALUES (42::int), (7);
-- select a row object, representing every row in foo;
SELECT foo
FROM foo;
Tạo một hàm lấy một kiểu hàngfoo
bool
và a int
và chỉ cần đưa ra một thông báo và trả về true.
CREATE FUNCTION build_details( myrow foo, j int, k bool )
RETURNS bool AS $$
BEGIN
RAISE NOTICE '%, %, %', myrow, j, k;
RETURN true;
END;
$$ LANGUAGE plpgsql;
Bây giờ chúng ta có thể sử dụng cú pháp trên để truyền đối tượng hàng đại diện cho một hàng foo
, với hai biến khác là int
a và a bool
.
SELECT *
FROM foo
CROSS JOIN LATERAL build_details(foo::foo, 1000, true);
NOTICE: (42), 1000, t
NOTICE: (7), 1000, t
bar | build_details
-----+---------------
42 | t
7 | t
(2 rows)
Tất nhiên, bạn vẫn có thể sử dụng LIMIT
hoặc bất kỳ vị từ nào bạn muốn.