首页 > 解决方案 > 将日期附加到 Proc 中的表名

问题描述

我创建了一个函数来获取 yyyymmdd 格式的当前日期值。

create or replace function currdate() returns text as $$ select 'account_'||TO_CHAR(current_date , 'yyyymmdd');
$$ LANGUAGE sql;

现在我必须编写一个 Proc 来将此日期 'yyyymmdd' 附加到创建快照表中,该快照表将在该月的第一天和最后一天创建。我写了下面的过程

create or replace procedure proc_1() AS $$
declare 
dttoday text := currdate();
int_check int := checkint(); 
begin 
if int_check = 1 then 
create table **schema.snapshot_currdate** as (select * from schema1.original_table); end if;
end;
$$
language plpgsql;

此处创建表时:snapshot_currdate我需要将其创建为名称snapshot_yyyymmdd(执行日期) 声明的变量 int_check 是一个检查其每月的第一天或最后一天的函数,它将返回整数值 1

有任何想法吗?

标签: postgresqlpostgresql-9.1

解决方案


仅供参考,Postgres 9.1 比 EOL 晚了四年。就像是:


currdate() returns text as $$ select 'account_'||TO_CHAR(current_date , 'yyyymmdd');
$$ LANGUAGE sql;

CREATE OR REPLACE PROCEDURE public.proc_1()
 LANGUAGE plpgsql
AS $procedure$
declare
dttoday text := currdate();
begin
EXECUTE 'create table '|| quote_ident('public')||'.'||quote_ident('snapshot_'||split_part(dttoday, '_', 2))||'()';
RAISE NOTICE '%', dttoday;
end;
$procedure$

split_part是因为 currdate()退货account_yyyymmdd,你说你想要snapshot_yyyymmdd。有关动态命令的更多信息,请参见此处:

https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN


推荐阅读