-- -- Argument modes: IN, OUT, INOUT, named. -- -- Named IN arguments are available as local variables. CREATE FUNCTION named_in(a int, b int) RETURNS int LANGUAGE plruby AS $$ a * b $$; SELECT named_in(6, 7); named_in ---------- 42 (1 row) -- A single OUT argument. CREATE FUNCTION one_out(a int, OUT doubled int) LANGUAGE plruby AS $$ doubled = a * 2 $$; SELECT one_out(21); one_out --------- 42 (1 row) SELECT * FROM one_out(21); doubled --------- 42 (1 row) -- Multiple OUT arguments. CREATE FUNCTION add_sub(a int, b int, OUT sum int, OUT diff int) LANGUAGE plruby AS $$ sum = a + b diff = a - b $$; SELECT * FROM add_sub(10, 4); sum | diff -----+------ 14 | 6 (1 row) -- INOUT argument. CREATE FUNCTION inc(INOUT x int) LANGUAGE plruby AS $$ x = x + 1 $$; SELECT inc(41); inc ----- 42 (1 row) -- An explicit return inside the body still lets OUT collection run. CREATE FUNCTION out_with_return(a int, OUT r int) LANGUAGE plruby AS $$ r = a return if a > 0 r = -a $$; SELECT out_with_return(5); out_with_return ----------------- 5 (1 row)