【发布时间】:2014-03-13 18:05:57
【问题描述】:
我想创建一个从未知表创建的视图中返回行的函数:
CREATE OR REPLACE FUNCTION tt_query(text, timestamp without time zone)
RETURNS SETOF record AS
$$
DECLARE
orig_name ALIAS FOR $1;
data_tt ALIAS FOR $2;
BEGIN
[...]
EXECUTE 'create OR REPLACE TEMP view temp as
select *
from '
||orig_name
||' where trigger_changed >'
||quote_literal(data_tt)
||' ORDER BY trigger_changed DESC';
[...]--other work on view temp
--NOW I WANT RETURN THE ROW OF view temp
END;
$$
LANGUAGE plpgsql VOLATILE
好的,我认为(在你的帮助下):
表:
create table t(a integer, b text);
功能:
CREATE OR REPLACE FUNCTION f()
RETURNS SETOF record AS
$$
BEGIN
RETURN QUERY EXECUTE 'SELECT * FROM t';
END;
$$
LANGUAGE plpgsql VOLATILE
类型:
CREATE TYPE y AS (
a int,
b text
);
现在有可能吗?:
select * from f() as y;
在我的例子中,y name 是一个变量,我在另一个函数中创建它
【问题讨论】:
-
RETURN QUERY EXECUTE 'SELECT * FROM temp'怎么样? -
当我选择 tt_query(val1, val2) 我有: 错误:la funzione che restituisce insiemi è chiamata in un contesto che non può accettare un insieme SQL state: 0A000
-
在会话中运行
SET lc_messages = 'C'以在会话期间获取默认英文消息。 -
抱歉:错误:在不能接受集合的上下文中调用集合值函数
-
如果我写它就可以工作: select * from tt_query(val1, val2) t(int a, int c, ... etc);但我想在这种模式下写我的查询:-(
标签: postgresql record plpgsql