sql – 具有动态文件名的COPY
发布时间:2021-02-26 05:43:59 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试编写一个函数来将csv数据加载到表中.我希望输入参数是文件的路径. CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar) RETURNS void AS$BODY$BEGINCOPY climatedata( climatestationid,date,prcp,prcpqflag,prcpmflag,prcpsflag,tm
我正在尝试编写一个函数来将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()来清理文件名.这也包括必要的封闭单引号. (编辑:天瑞地安资讯网_保定站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 数据库设计 – 如何为消费者应用程序设计“NOSQL”数据库(例
- 如何从降序开始从Firebase数据库中检索数据?
- sql-server – DL380p-Gen8 D2700适用于SQL 2012标准版的适
- 还有哪些其他数据库具有与Oracle的闪回查询类似的功能?
- sql的存储过程定义有哪些方法,你知道几种?
- sql-server – SQL批处理,语句和RPC之间的区别?
- sql-server – SQL Server中的树结构数据查询
- HTML行内元素与块级元素有哪些及区别详解
- sql-server – coldfusion,iis7,sql server管理员有哪些日常
- sqlserver isnull在数据库查询中的作用
站长推荐
热点阅读