微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 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

所以我需要这样的东西,除了结果应该是数字而不是字符串变量x var1而变量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);

任何想法如何动态组成变量名称,正如我所说的那些例子很简单,只是为了表明我的观点.我需要在变量中更改多个数字,因此数组不适合我.

解决方法

您可以执行以下操作,但如果要创建的变量超过16,000个,请务必小心:

$BODY$
declare

sql_text text;
_ptc int;

begin

sql_text = 'create table <schema>.<table> as 
    select id,process_date ' ;

for _ptc in select distinct(preferred_term_code) from <schema>.<table> order by 1

loop sql_text = sql_text || ',case when preferred_term_code = '||_ptc||' then 1 else 0 end as ptc_'||_ptc|| ' ';
raise notice '_ptc: %',_ptc;
end loop;
sql_text = sql_text || ' from <schema>.<table>
;';

execute sql_text;
grant select on <chema>.<table> to public;
raise notice 'Checks in the mail!';
end;
$BODY$

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐