sql – 具有动态文件名的COPY
发布时间:2021-02-26 03:30:21 所属栏目: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()来清理文件名.这也包括必要的封闭单引号. (编辑:均轻资讯网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
- sql – 如何判断Oracle中的值是否不是数值?
- regex – 用于验证SQL Server表名的正则表达式
- sqlserver中如何寻找出连续日期记录的代码
- sql-server – 在“select top n”查询中返回未锁
- 数据库 – phpMyAdmin – 错误gt;格式参数不正确
- tsql – SQL Server中基于FIFO的库存库存评估
- sql-server – 使用MAX文本或更具体,更小的类型
- sql-server-2005 – 为什么SQL Server在运行参数
- sql-server – 从客户端检查与SQL Server的连接的
- sql中go的作用是什么?一文带你了解go的用法
热点阅读

