在 Proc 中将日期附加到 table 名称
Append Date to a table name in Proc
我创建了一个函数来获取 yyyymmdd 格式的当前日期值。
create or replace function currdate() returns text as $$ select 'account_'||TO_CHAR(current_date , 'yyyymmdd');
$$ LANGUAGE sql;
现在我必须编写一个 Proc 来附加此日期 'yyyymmdd' 以创建将在该月的第一天和最后一天创建的快照 table。
我写了下面的 Proc
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;
创建 table 时:snapshot_currdate 我需要将其创建为名称 snapshot_yyyymmdd(执行日期)
声明的变量 int_check 是一个函数,用于检查它是否会在一个月的第一天或最后一天 return 整数值 1
有什么想法吗?
仅供参考,Postgres 9.1 已经停产四年了。
类似于:
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()
returnsaccount_yyyymmdd
而你说要snapshot_yyyymmdd
。有关动态命令的更多信息,请参见此处:
https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
我创建了一个函数来获取 yyyymmdd 格式的当前日期值。
create or replace function currdate() returns text as $$ select 'account_'||TO_CHAR(current_date , 'yyyymmdd');
$$ LANGUAGE sql;
现在我必须编写一个 Proc 来附加此日期 'yyyymmdd' 以创建将在该月的第一天和最后一天创建的快照 table。 我写了下面的 Proc
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;
创建 table 时:snapshot_currdate 我需要将其创建为名称 snapshot_yyyymmdd(执行日期) 声明的变量 int_check 是一个函数,用于检查它是否会在一个月的第一天或最后一天 return 整数值 1
有什么想法吗?
仅供参考,Postgres 9.1 已经停产四年了。 类似于:
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()
returnsaccount_yyyymmdd
而你说要snapshot_yyyymmdd
。有关动态命令的更多信息,请参见此处:
https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN