【发布时间】:2021-01-21 00:52:40
【问题描述】:
我正在尝试创建一个函数来动态创建表备份。
但我收到如下错误:
错误:“'”处或附近的语法错误
这是我正在尝试的一种方法:
CREATE OR REPLACE FUNCTION public.test () RETURNS varchar AS
$BODY$ DECLARE backup_string varchar(50);
BEGIN
backup_string = (SELECT '_'||LPAD(DATE_PART('DAY',CURRENT_DATE)::VARCHAR,2,'0')||DATE_PART('MONTH',CURRENT_DATE)::VARCHAR||DATE_PART('YEAR',CURRENT_DATE)::VARCHAR||'_1');
EXECUTE 'SELECT * INTO table_name'|| backup_string ||' FROM table_name';
RETURN 'Y';
EXCEPTION WHEN others THEN RETURN 'N';
END
; $BODY$
LANGUAGE 'plpgsql'
GO
SELECT * FROM test()
我不明白,为什么那个执行语句给我这样的错误。
【问题讨论】:
-
不相关,但是:可以使用
backup_string := '_'||to_char(current_date, 'ddmmyyyy')||'_1';简化backup_string的生成 -
go在 Postgres 中不是有效的 SQL 命令 -
错误信息很奇怪,因为你的代码中根本没有双引号。尝试将 SQL 分配给一个变量,然后在执行之前使用
raise notice“打印”它。这将有助于发现错误。 -
@a_horse_with_no_name op 用于引发警告:imgur.com/a/tMeGCd5 获得成功以引发警告,但是当我注释掉 EXECUTE 部分时,得到了同样的错误。
-
按提示尝试
CREATE TABLE AShereSELECT INTO在plpgsql中具有特殊/替代含义。
标签: postgresql function plpgsql dynamic-sql ddl