Проблема с переупорядочением записей в PostgreSQL - PullRequest
0 голосов
/ 08 января 2012

Мне нужно выполнить переупорядочение записей, используя временную метку, но я получаю нарушение ограничения NOT-NULL, когда запрос выполняется без совпадений.

Ниже приведен запрос -

UPDATE ORDR
SET    QUE_NUM = ORDR2.SORT_ORDER
FROM
   (
    SELECT ORDR_ID, ROW_NUMBER() OVER (ORDER BY CRTD_TS) AS SORT_ORDER
    FROM   ORDR
    WHERE  STUS_CD IN ('01','02','03','04','05','06')
   ) ORDR2
WHERE ORDR2.ORDR_ID = ORDR.ORDR_ID

Я получаю исключение ниже - ОШИБКА: нулевое значение в столбце «que_num» нарушает ненулевое ограничение

1 Ответ

1 голос
/ 09 января 2012

Запрос работает как есть .Я только что проверил.Рассмотрим эту демонстрацию:

CREATE TEMP TABLE ordr (
   ordr_id int
  ,que_num int NOT NULL
  ,stus_cd text
  ,crtd_ts int
  );
INSERT INTO ORDR VALUES
 (1, 1, '01', 6)
,(2, 2, '02', 5)
,(3, 3, '03', 4)
,(4, 4, '04', 3)
,(5, 5, '05', 1)
,(6, 6, '06', 2);

UPDATE ordr
SET    que_num = ordr2.sort_order
FROM  (
    SELECT ordr_id, row_number() OVER (ORDER BY crtd_ts) AS sort_order
    FROM   ordr
    WHERE  stus_cd IN ('07','08') -- no match
   ) ordr2
WHERE ordr2.ordr_id = ordr.ordr_id

Возвращает:

Запрос успешно возвращен: затронуто 0 строк, время выполнения 31 мс.

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