plpgsql 中的动态变量名称(字符串到变量名称)

Bak*_*ker 5 postgresql dynamic-sql plpgsql

有没有办法动态使用变量名,我的意思是将其组成一个字符串,然后使用它。

请不要告诉我使用数组,我展示的示例只是为了更好的图片而进行的简化。

do $$ 
declare 
  var1 int:=1; 
  var2 int:=2; 
  var3 int:=3;  
  i int; 
begin
  raise notice 'Variable x %' , var1; 
  raise notice 'Variable x %' , var2; 
  raise notice 'Variable x %' , var3; 
  for i in 1..3 loop raise
     notice 'Variable x %' , 'var' || i; 
  end loop; 
end 
$$

Result

NOTICE:  Variable x 1
NOTICE:  Variable x 2
NOTICE:  Variable x 3
NOTICE:  Variable x var1
NOTICE:  Variable x var2
NOTICE:  Variable x var3
Run Code Online (Sandbox Code Playgroud)

所以我需要这样的东西,除了结果应该是数字而不是字符串,Variable x var1但是Variable x 1

并且执行也不起作用

do 
$$ 
declare 
  var1 text = 'car'; 
  var2 text = 'truck'; 
  var3 text = 'boat'; 
  code text ; 
begin 
  for i in 1..3 loop 
    code  = 'Insert into My_table values (' || i || ',' || 'var' || i || ');'; 
    execute   code;
  end loop; 
end 
$$

ERROR:  column "var1" does not exist
LINE 1: Insert into My_table values (1,var1);
Run Code Online (Sandbox Code Playgroud)

关于如何动态组成变量名称的任何想法,正如我所说,这些示例很简单只是为了表明我的观点。我需要更改的不仅仅是变量中的数字,因此数组对我来说不是一个解决方案。

Pav*_*ule 0

PLpgSQL 不支持任何方式,如何动态评估变量。对不起。没有像eval这样的东西。