首页 > 解决方案 > 如何在 pl/pgsql 的一个循环中创建多个类型?

问题描述

我想创建许多彼此相似的类型,它们可能具有不同的长度,例如

CREATE TYPE TP_A (
    internallength = 8,
    input = tp_a_in,
    output = tp_a_out,
    storage = plain,
    alignment = double
};

输入和输出函数的格式相同,我想在我的数组中循环类型的名称(“tp_a”)和内部长度(8),例如names={tp_a,tp_b,tp_c,tp_d}; lens={8,8,16,32}

我怎么能这样做?我可以将名称声明为 text[] 并在其上循环吗?

标签: postgresqlplpgsql

解决方案


您可以尝试使以下代码适应您正在使用的 CREATE TYPE 语句:

do
$$
declare
 tn text[] = '{"tp_a", "tp_b"}';
 tl int[] = '{8, 16}';
begin
 for i in 1..2
 loop
 execute format('create type %I as (field%s int)', tn[i] , tl[i]);
 end loop;
end;
$$;

请参阅FORMAT 函数


推荐阅读