在一个表中插入具有NULL值的行

时间:2018-11-27 22:00:51

标签: postgresql

我有一个自定义类型:

CREATE TYPE public.relacion AS
   (id integer,
    codpadre character varying,
    codhijo character varying,
    canpres numeric(7,3),
    cancert numeric(7,3),--this is usually NULL
    posicion smallint);

此后,我需要relacion类型中的另一种类型:

CREATE TYPE public.borrarrelacion AS
   (idborrar integer,
    paso integer,
    rel relacion);

好吧,现在到函数中,我需要将一些行从relacion类型表复制到borrarrelacion类型表:

这是我的代码的片段:

    DECLARE:
    r relacion%ROWTYPE;
    ------------

    BEGIN

    EXECUTE FORMAT ('CREATE TABLE IF NOT EXISTS "mytable" OF borrarrelacion (PRIMARY KEY (idborrar))');
    EXECUTE FORMAT ('SELECT * FROM %I WHERE codpadre = %s AND codhijo = %s',
            tablarelacion,quote_literal(codigopadre),quote_literal(codigohijo)) INTO r;
    EXECUTE FORMAT ('INSERT INTO "mytable" VALUES(0,0,%s)',r);

但是我得到一个错误,因为字段r.cancert为NULL,并且它试图插入类似的内容:

INSERT INTO "mytable" VALUES(0,0,(0,'cod1','cod2',10,,0));

我可以解决此问题,方法是读取r的每个字段并将其值放入INSERT语句中,如下所示:(并将NULL值更改为0)

EXECUTE FORMAT ('INSERT INTO "mytable" VALUES(0,0,(%s,%s,%s,%s,%s,%s))',
    r.id,quote_literal(r.codpadre),quote_literal(r.codhijo),r.canpres,COALESCE(r.cancert,0),r.posicion);

但是我想知道是否可以避免这种情况,并且可以从一个表到另一表插入完全相同的行。

0 个答案:

没有答案
相关问题