我正在尝试编写一个函数来将csv数据加载到表中.我希望输入参数是文件的路径.
CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar) RETURNS void AS $BODY$ BEGIN copY climatedata( climatestationid,date,prcp,prcpqflag,prcpmflag,prcpsflag,tmax,tmaxqflag,tmaxmflag,tmaxsflag,tmin,tminqflag,tminmflag,tminsflag) FROM $1 WITH csv header; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION public.filltmaxa(character varying) OWNER TO postgres;
当我尝试创建此功能时,我得到了
Syntax error at $1
它出什么问题了?
解决方法
首先,您的函数名称不匹配:
CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar) ... ALTER FUNCTION public.filltmaxa(character varying)
但这是一个额外的问题.
回答
你需要动态sql:
CREATE OR REPLACE FUNCTION loaddata(filepathname text) RETURNS void AS $func$ BEGIN EXECUTE format (' copY climatedata( climatestationid,tminsflag) FROM %L (FORMAT CSV,HEADER)',$1); -- current Syntax --- WITH CSV HEADER',$1); -- tolerated legacy Syntax END $func$LANGUAGE plpgsql;
format()
需要Postgresql 9.1.
这样,我们可以提供文件名而无需额外的一组(转义)单引号.呼叫:
SELECT loaddata('/absolute/path/to/my/file.csv')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。