Неверный идентификатор обновления Oracle при обновлении - PullRequest
0 голосов
/ 06 декабря 2018

Я получаю исключение «неверный идентификатор» при запуске следующего скрипта.Как я видел по этой ссылке , она должна работать.

Она не может ссылаться на таблицу 'a2' в разделе выбора звука, но должна обновить строку с соответствующим значением.

update auto a2 set uuid = 
    (select uuid from (
        select c.uuid, c.pk from color c
            join sit s on s.pk = c.sit_fk
            --where s.auto_fk = auto.pk
            join auto m on m.pk = s.auto_fk
            where m.pk = a2.pk
            group by c.pk, c.uuid
            order by c.pk desc
        )
    where rownum = 1)

1 Ответ

0 голосов
/ 06 декабря 2018

Ссылка на псевдоним a2 на внешнем уровне коррелированного запроса, а не на вложенный уровень.

SQL Fiddle

Oracle 11g R2Настройка схемы :

CREATE TABLE auto ( pk, uuid ) AS
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 2 FROM DUAL;

CREATE TABLE color ( pk, uuid, sit_fk ) AS
  SELECT 1, 2, 1 FROM DUAL UNION ALL
  SELECT 2, 1, 2 FROM DUAL;

CREATE TABLE sit ( pk, auto_fk ) AS
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 2 FROM DUAL;

Запрос 1 :

update auto a2 set uuid = 
    (select uuid from (
        select c.uuid, c.pk, m.pk AS apk from color c
            join sit s on s.pk = c.sit_fk
            --where s.auto_fk = auto.pk
            join auto m on m.pk = s.auto_fk
            group by m.pk, c.pk, c.uuid
            order by m.pk, c.pk desc
        )
    where rownum = 1
    and a2.pk = apk
)

Результаты :

Запрос 2 :

SELECT *
FROM   auto

Результаты :

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