postgresql 在“20231002”处或附近出现语法错误

问题描述 投票:0回答:1

我想创建可以创建具有动态表名的表的过程。 我想将日期传递给过程并使用该日期创建表。

我做了什么:

CREATE OR REPLACE PROCEDURE l2.accounts_balances_load(var_balancedate date)
 LANGUAGE plpgsql
AS $procedure$
declare var_balancedate_ int = to_char(var_balancedate, 'YYYYMMDD') ;  
begin

raise notice 'SQL:: %', var_balancedate_;

execute format ('create table if not exists l2.accounts_balances_%I partition of l2.accounts_balances', var_balancedate_);

end;
$procedure$
;   

我打电话的方式:

call l2.accounts_balances_load('2023-10-02');

但是我收到错误:

SQL Error [42601]: ERROR: syntax error at or near ""20231002""
Где: PL/pgSQL function l2.accounts_balances_load(date) line 9 at EXECUTE

我做错了什么?

postgresql dynamic procedure
1个回答
0
投票

在这种情况下,您需要格式说明符

%s
而不是
%I
来表示
format()
。喜欢:

CREATE OR REPLACE PROCEDURE l2.accounts_balances_load(var_balancedate date)
  LANGUAGE plpgsql AS
$proc$
DECLARE
   var_balancedate_ int := to_char(var_balancedate, 'YYYYMMDD');
BEGIN
   RAISE NOTICE 'SQL:: %', var_balancedate_;

   EXECUTE format(
      'CREATE TABLE IF NOT EXISTS l2.accounts_balances_%s
       PARTITION OF l2.accounts_balances', var_balancedate_);
END
$proc$;
© www.soinside.com 2019 - 2024. All rights reserved.