我遇到这种情况:
我有一张名为Airports
的桌子,需要有一组航空公司代表航空公司在该机场的航班。当然,我希望让这样的数组的每个值与现有的航空公司相匹配。
有没有办法使用数组来实现这一目标?如果是这样,那么干净的方法是什么呢?
答案 0 :(得分:0)
我找到了一种方法来解决这个问题,使用存储的函数来检查数组中的每个元素是否与现有的航空公司相对应。
代码
-- tipo para aeropuerto
create type taeropuerto as (
nombre varchar(90),
ubicacion tubicacionAeorpuerto,
medidas tmedidasPista,
aerolineas oid[]
);
-- Aerolineas
create type taerolinea as (
nombre varchar(100)
);
-- tabla correspondiente
create table aerolinea of taerolinea
(primary key(oid))
with oids;
-- function para chequear que cada aerolinea insertada sea correcta
create or replace function check_aerolineas(aerolineas oid[]) returns boolean as
$$
declare
aerolineas_tbl record;
o oid;
valido boolean;
begin
valido = true;
foreach o in array aerolineas loop
valido = valido and (o in (select oid from aerolinea));
end loop;
return valido;
end;
$$ language plpgsql;
create table aeropuerto of taeropuerto (
constraint aerolineas_check check(check_aerolineas(aerolineas))
);
这样,每次插入或更新机场时,都会检查航空公司。如果阵列中存在不存在的航空公司,则失败