我是SQL的初学者,我不知道如何解决这个问题。如何将以下SQL查询和存储过程组合到单个SQL查询中。这是一个PostgreSQL查询和函数。任何帮助表示赞赏。
以下查询为查询的每个值调用存储过程/函数:
SELECT t.trj_id, T2.trj_id, Similar_trj_woffset(t.trj_id, T2.trj_id)
FROM transitions T1,
transitions T2
WHERE T1.w_s = T2.w_s
AND T1.w_e = T2.w_e
AND T1.trans_id <> T2.trans_id
存储过程/功能是:
create or replace function similar_trj_woffset(
IN t1 as integer,
IN t2 as integer,
OUT score as integer,
OUT offset as integer
) AS $$
declare
off_set integer :=0;
score integer := 0;
cou integer;
time1 integer;
time2 integer;
dist integer;
begin
for off_set in 0..10 LOOP
time1 := 0;
time2 := 0 + off_set;
cou := 0;
while time2 < 100 Loop
select vec_length(P.x-P2.x,P.y-P2.y,P.z-P2.z) into dist
from AtomPositions P, AtomPositions P2
where P.trj_id = t1
and P2.trj_id = t2
and P.t = time1
and P2.t = time2;
if dist < cuto`enter code here`ff then
cou : = cou + 1;
time1 := time1 + 1;
time2 := time2 + 1;
end loop
if cou > score then
score := cou ;
offset := off_set;
end if;
off_set := off_set + 1;
end loop;
end $$ language plpgsql;
有人可以告诉我如何将查询和存储过程合并到一个SQL查询中。
答案 0 :(得分:1)
要调用此函数,请将返回的记录拆分为单个列:
SELECT t.trj_id, t2.trj_id, (similar_trj_woffset(t.trj_id, t2.trj_id)).*
FROM transitions t1
JOIN transitions t2 USING (w_s, w_e)
WHERE t1.trans_id <> t2.trans_id
注意函数调用周围的括号
我还重写了查询以使用适当的ANSI JOIN语法和简化的等值连接条件(USING
)并删除了虚假的上壳。
答案 1 :(得分:0)
你不应该合并它们是你的基本答案。代码在函数中的一个目的是可以从多个查询中调用它并在一个地方维护。当查询已经在每次迭代时调用函数时,合并这两者是没有意义的。
你期望从中获得什么,因为只是移动代码不会做任何积极的事情?
实际上,如果有任何其他查询使用它,如果你删除它们就会中断。