【发布时间】:2019-08-28 10:12:43
【问题描述】:
我已经完成了从我的数据库复制到 csv 表格的某些行的功能。 我需要将表的名称作为 TEXT 参数传递。
我从 SQL Workbench/J 以这种模式调用我的函数:
select save_audit_deletions(1000, 'deliveries_audits');
但我有这个错误:
执行SQL命令时出错:
select save_audit_deletions(1000, 'deliveries_audits') ERROR: relation "table_name" does not exist Where: PL/pgSQL function save_audit_deletions(numeric,text) line 10 at SQL statement
这是我的功能:
CREATE OR REPLACE FUNCTION public.save_audit_deletions(days numeric, table_name text)
RETURNS void
LANGUAGE plpgsql
AS
$body$
DECLARE
interval INT;
statement_copy text;
statement_count text;
copied_rows INTEGER; --number of rows copied by COPY
backup_rows INTEGER; --number of rows that COPY needs to copy into csv
BEGIN
UPDATE table_name SET backup = 1 WHERE backup = 0 AND creationdate >= now()::DATE - days AND creationdate < now()::DATE;
statement_copy := 'COPY (SELECT * FROM ' || table_name || ' WHERE backup = 1) TO ''\var\audiobays\logs\audit\' || table_name || '_deletions_(' || date-days|| ').csv'' CSV DELIMITER '','' HEADER;';
execute statement_copy
into copied_rows;
statement_count := 'SELECT COUNT (*) FROM ' || table_name || ' WHERE backup = 1';
execute statement_count
into backup_rows;
IF copied_rows = backup_rows THEN
DELETE FROM table_name WHERE backup = 1;
ELSE
UPDATE table_name SET backup = 0 WHERE backup = 1;
END IF;
END;
$body$
VOLATILE
COST 100;
COMMIT;
如何将参数传递给函数以允许函数工作? 谢谢。
【问题讨论】:
-
问题不在于传入,问题在于你构建的动态sql。将
statement_copy粘贴到 RAISE NOTICE 中以查看您的 SQL 是什么。
标签: postgresql parameters plpgsql dynamic-sql stored-functions