postgresql – plpgsql中的动态变量名(字符串到变量名)
发布时间:2020-12-13 15:55:02 所属栏目:百科 来源:网络整理
导读:有没有办法动态使用变量名称,我的意思是将其组成一个字符串,然后使用它. 请不要告诉我使用数组,我所示的例子只是简化以获得更好的图片. do $$declare var1 int:=1; var2 int:=2; var3 int:=3; i int; begin raise notice 'Variable x %',var1; raise notice
有没有办法动态使用变量名称,我的意思是将其组成一个字符串,然后使用它.
请不要告诉我使用数组,我所示的例子只是简化以获得更好的图片. 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$ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |