感谢帮助。抱歉英文不好。
我创建了一个函数来返回一个tablename,用于我的select语句,这里是函数的脚本:
创建或替换函数getfromtable(objecttype …
你并没有真正做错事,但功能就是不行。函数返回的不是表名,而是一个值(此时已完成解析和查询计划构建)。
也许 分区 可能会帮到你?
您可以返回查询结果,而不是返回表名。见修改功能。
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, ...);