Ich würde es so machen,
SELECT *
FROM my_table
CROSS JOIN LATERAL build_details( my_table, 1000, true )
LIMIT 1;
Sie können dies anhand einiger Beispieldaten unten sehen.
-- 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;
Erstellen Sie eine Funktion, die den Zeilentypfoo a boolund an verwendet, inteinfach einen Hinweis auslöst und true zurückgibt.
CREATE FUNCTION build_details( myrow foo, j int, k bool )
RETURNS bool AS $$
BEGIN
RAISE NOTICE '%, %, %', myrow, j, k;
RETURN true;
END;
$$ LANGUAGE plpgsql;
Jetzt können wir die obige Syntax verwenden, indem wir das Zeilenobjekt übergeben, das eine Zeile in darstellt foo, zusammen mit zwei anderen Variablen an intund 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)
Sie können natürlich LIMITimmer noch Prädikate verwenden oder was auch immer Sie möchten.