Mr.*_*Mr. 21 sql postgresql dynamic-sql postgresql-9.1
可能重复:
Postgres动态查询功能
我希望使用下面查询中返回的字符串作为其他查询的表名.
SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')
如你所见,它返回一个字符串.我希望将它用作另一个查询的输入,例如
CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')) 
AS * SELECT FROM backup
可以吗?有什么线索怎么样?
Cra*_*ger 42
您需要通过块或PL/PgSQL函数()使用PL/PgSQL EXECUTE语句.PostgreSQL使用的普通SQL方言不支持动态SQL,只能在程序PL/PgSQL变体中使用.DOCREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
的format(...)函数的%I和%L格式指定符做适当的识别符和文字分别引用.
对于文字,我建议使用EXECUTE ... USING而不是format(...)使用%L,但对于像表/列名这样的标识符,格式%I模式是详细quote_ident调用的简洁替代方法.
| 归档时间: | 
 | 
| 查看次数: | 23800 次 | 
| 最近记录: |