Вставить строку со значениями NULL из одной таблицы - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть пользовательский тип:

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 type:

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.cancertNULL, и он пытается вставить что-то вроде этого:

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);

Но я хотел бы знать, могу ли я избежать этого, и могу ли я вставить одну и ту же строку из одной таблицы в другую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...