Как ОБНОВИТЬ столбец таблицы с функцией вызова после команды INSERT в PostgreSQL? - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужна ваша помощь, у меня проблема с обновлением определенного столбца после выполнения команды вставки. таблица:

CREATE SEQUENCE public.llh_type_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 261
CACHE 1;
ALTER TABLE public.llh_type_id_seq
OWNER TO postgres;

CREATE TABLE public.llh_type
(id bigint NOT NULL DEFAULT nextval('llh_type_id_seq'::regclass),
identifier text,
name text)
WITH (
OIDS=FALSE);
ALTER TABLE public.llh_type
OWNER TO postgres;

функция:

CREATE OR REPLACE FUNCTION public.generate_identifier(
id bigint,
prefix text)
RETURNS text AS
$BODY$
SELECT 
   CASE WHEN length($1::text) < 2 
      THEN UPPER($2 || '00000' || $1)
        WHEN length($1::text) >= 2 AND length($1::text) < 3  
      THEN UPPER($2 || '0000' || $1)
        WHEN length($1::text) >= 3 AND length($1::text) < 4  
      THEN UPPER($2 || '000' || $1)
        WHEN length($1::text) >= 4 AND length($1::text) < 5  
      THEN UPPER($2 || '00' || $1)
        WHEN length($1::text) >= 5 AND length($1::text) < 6  
      THEN UPPER($2 || '0' || $1)
    ELSE
    UPPER($2 || $1)
   END;
  $BODY$
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;
  ALTER FUNCTION public.generate_identifier(bigint, text)
  OWNER TO postgres;

После этого я пытаюсь вызвать мою функцию после вставки данных:

WITH t AS(
INSERT INTO llh_type (name) values('one')
RETURNING id)

UPDATE llh_type SET identifier = generate_identifier((select id from   
t),'TC') WHERE id = (select id from t);

После выполнения этого кода у меня появляется сообщение: «Запрос успешно возвращен: затронуто 0 строк, время выполнения 12 мсек». Но таблица теперь выглядит так: http://joxi.ru/nAypMQjCYBggq2

В другом случае у меня есть решение, но я не уверен, что оно правильное:

INSERT INTO llh_type (name) values('one');
UPDATE llh_type SET identifier = generate_identifier((select id from   
llh_type order by id desc limit 1),'TC') 
WHERE id = (select id from llh_type order by id desc limit 1);

И после запуска у меня появляется сообщение: «Запрос успешно возвращен: одна строка затронута, время выполнения 12 мсек». И результат выглядит, как и ожидалось: http://joxi.ru/5md13oZCkM3el2

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