Могу ли я сделать обновление, используя также оператор FROM? - PullRequest
0 голосов
/ 18 мая 2018

Я хотел бы сделать UPDATE для некоторых полей таблицы, включая также условие FROM, как показано ниже:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET
    ID = NULL,
    IMPORT_DATE = NULL,
    IMPORT_STATUS = 0,
    ERROR_CODE = 3,
    LASTMODIFIEDAT = NULL
FROM T_BEDA
WHERE 1=1
    AND TB.TRANSACTION_ID = 999
    AND TB.TRANSACTION_ID = T_BEDA.TAC
    AND T_BEDA.SOP IS NULL;

В текущем состоянии происходит сбой со следующей ошибкой:

Отчет об ошибке -
Ошибка SQL: ORA-00933: команда SQL не завершена должным образом

Видимо, предложение FROM не разрешено в этомcase.

По сути, я хотел бы, чтобы это обновление происходило только тогда, когда T_BEDA.SOP равно NULL.Как я могу решить эту проблему с помощью SQL или PL / SQL?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Похоже, вы пытаетесь использовать синтаксис обновления Postgres.Oracle не поддерживает это и не поддерживает объединения обновлений, но вы можете перефразировать свое обновление, чтобы использовать подзапрос в предложении WHERE для проверки второй таблицы:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,
    IMPORT_DATE = NULL,
    IMPORT_STATUS = 0,
    ERROR_CODE = 3,
    LASTMODIFIEDAT = NULL
WHERE
    TB.TRANSACTION_ID = 999 AND
    EXISTS (SELECT 1 FROM T_BEDA t WHERE TB.TRANSACTION_ID = t.TAC AND t.SOP IS NULL)
0 голосов
/ 18 мая 2018

Вот что я бы сделал:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
 SET ID = NULL,IMPORT_DATE = NULL,IMPORT_STATUS = 0,ERROR_CODE = 3, LASTMODIFIED = NULL 
WHERE 
 (TB.TRANSACTION_ID = 999) AND 
 (TB.TRANSACTION_ID) = (Select T_BEDA.TAC From T_BEDA WHERE T_BEDA.SOP           IS NULL)
0 голосов
/ 18 мая 2018

Используйте предложение IN, чтобы проверить, существует ли TRANSACTION_ID в T_BEDA:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,
    IMPORT_DATE = NULL,
    IMPORT_STATUS = 0,
    ERROR_CODE = 3,
    LASTMODIFIEDAT = NULL
WHERE TB.TRANSACTION_ID = 999 
  AND TB.TRANSACTION_ID IN (
        SELECT T_BEDA.TAC 
        FROM T_BEDA 
        WHERE TB.TRANSACTION_ID = T_BEDA.TAC
          AND T_BEDA.SOP IS NULL
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...