【发布时间】:2015-09-19 08:17:21
【问题描述】:
sql 过程创建临时表,该表应该在其他 sql 过程中使用。 我试过了
CREATE or replace FUNCTION f_createquery()
RETURNS TABLE ( kuupaev date
) AS $f_createquery$
-- actually this is big and time consuming select statement which should evaluated only once:
select current_date as kuupaev
$f_createquery$ LANGUAGE sql STABLE;
CREATE or replace FUNCTION f_usequery()
RETURNS TABLE ( kuupaev date
) AS $f_usequery$
-- big query tehing is used several times in query:
select kuupaev from tehing
union all
select kuupaev+1 from tehing
union all
select kuupaev+2 from tehing
$f_usequery$ LANGUAGE sql STABLE;
with tehing as (
select * from f_createquery() _
)
select * from f_usequery() _
但出现错误
ERROR: relation "tehing" does not exist
tething 包含由存储过程创建的临时数据,它不存在于数据库中。如何允许其他存储过程使用它? 如何为 Postgres 9.1+ 修复它?
有没有类似的东西
external table (kuupaev date)
允许定义外部表? 在实际应用中,f_createquery 中的 select 语句很大且耗时,并且应该只评估一次。
将select * from tehing 替换为f_usequery() 中的动态sql 可能可行,但这会阻止程序在运行时编译。是否有更好的解决方案或可以以更好的方式传递给其他存储过程,例如喜欢参数?
或者 f_createquery 应该使用固定名称创建临时表吗?
【问题讨论】:
-
f_createquery()创建tehing临时表?您至少可以显示创建临时表的存储过程部分吗?
标签: sql postgresql plpgsql