Postgresql
/ ,
create table x
(
a int not null,
b int not null,
c int not null
);
create table y
(
a int not null,
z int not null
);
select * from x;
insert into x VALUES
(1,2,3), (4,5,6);
insert into y values
(1, 100);
/ :
create or replace function computer
(
rx x,
ry y,
out expression1 int, out expression2 int, out expression3 int
)
as $$
begin
expression1 := rx.b + rx.c;
expression2 := expression1 + rx.a;
expression3 := expression2 + ry.z;
end;
$$ language 'plpgsql';
:
select x.a, x.b, x.c, y.z, answer.*
from x
join y on x.a = y.a
cross join lateral computer(x,y) answer
:

, :
select x.a, x.b, x.c, y.z, (computer(x, y)).*
from x
join y on x.a = y.a
, , 50 , 50 . cross join lateral . : "" PostgreSQL ?
, , record
create or replace function computer_b
(
anon record,
out expression1 int, out expression2 int, out expression3 int
)
as $$
begin
expression1 := anon.b + anon.c;
expression2 := expression1 + anon.a;
expression3 := expression2 + anon.z;
end;
$$ language 'plpgsql';
:
with data_source as
(
select x.*, y.z
from x
join y on x.a = y.a
)
select ds.*, answer.*
from data_source ds
cross join lateral computer_b(ds) answer