sql – 具有动态文件名的COPY
发布时间:2021-02-27 14:12:06 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试编写一个函数来将csv数据加载到表中.我希望输入参数是文件的路径. CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar) RETURNS void AS$BODY$BEGINCOPY climatedata( climatestationid,date,prcp,prcpqflag,prcpmflag,prcpsflag
|
我正在尝试编写一个函数来将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;
当我尝试创建此功能时,我得到了
它出什么问题了? 解决方法首先,您的函数名称不匹配: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;
SELECT loaddata('/absolute/path/to/my/file.csv')
这非常容易受到SQL注入的影响.为了防止它,我使用%L的format()来清理文件名.这也包括必要的封闭单引号. (编辑:开发网_运城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
- 雅虎收购Overture余威 Google阵脚大乱
- Intel:Banias继任者Dothean计划首次曝光
- sql-server – SET STATISTICS IO-工作表/工作文
- ASP.NET MVC5+EF6+EasyUI后台管理系统 微信公众平
- sql-server – SQL Server日志文件大小管理
- entity-framework – SQL FileStream Entity Fra
- Google依靠聚类软件技术 建五个地区新闻网站
- 如何在sql中将两行合并为一行?
- sql-server – 锁定CREATE TABLE
- ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理
热点阅读

