感谢您的帮助。 对不起,英语不好。
我创建了一个返回表名的函数,供我的select语句使用,此处为函数脚本:
select
我需要使用此功能,因为我具有名称为MMYY的表名或名称为YY的视图...该功能可以正常工作,但是,我需要在select中使用它,例如:
CREATE OR REPLACE FUNCTION getfromtable(objecttype varchar, destinationtable varchar, firstdate date, OUT tablename varchar)
AS $BODY$
declare
objectType ALIAS FOR $1;
destinationTable ALIAS FOR $2;
firstDate ALIAS FOR $3;
--tableResult varchar;
BEGIN
IF UPPER(objectType) = 'VIEW' THEN
select destinationTable || to_char(cast(firstDate as date),'yy') into tablename;
END IF;
IF UPPER(objectType) = 'TABLE' THEN
select destinationTable || to_char(cast(firstDate as date),'mmyy') into tablename;
END IF;
END;
$BODY$
LANGUAGE plpgsql
但是,这是我的问题,如果我执行脚本,postgres返回表名,但不执行表中的选择...我需要在表中执行选择,而不返回函数...
希望如此
select * from getfromtable('TABLE','tab_venda_',current_date)
我在做什么错了?
答案 0 :(得分:0)
您并没有真正在做错事,但是函数并不能那样工作。该函数返回的不是表名,而是一个值(此时已经完成了解析和查询计划的构建)。
也许partitioning可以帮助您吗?
答案 1 :(得分:0)
您可以返回查询结果,而不是返回表名。查看修改后的功能。
CREATE OR REPLACE FUNCTION getfromtable(objecttype varchar, destinationtable varchar, firstdate date)
RETURNS SETOF RECORD
AS $BODY$
declare
objectType ALIAS FOR $1;
destinationTable ALIAS FOR $2;
firstDate ALIAS FOR $3;
tablename varchar;
BEGIN
IF UPPER(objectType) = 'VIEW' THEN
select destinationTable || to_char(cast(firstDate as date),'yy') into tablename;
END IF;
IF UPPER(objectType) = 'TABLE' THEN
select destinationTable || to_char(cast(firstDate as date),'mmyy') into tablename;
END IF;
RETURN QUERY EXECUTE 'SELECT * FROM '||tablename;
END;
$BODY$
LANGUAGE plpgsql;
在选择时,您需要提供列列表才能使其正常工作
SELECT * FROM getfromtable('TABLE','tab_venda_',current_date) AS tab(column1_name column1_type, ...);