Ошибка оператора Update - удалите все недетерминированные пункты c where и переиздайте dml - PullRequest
0 голосов
/ 28 марта 2020

Привет, я получаю синтаксическую ошибку при выполнении приведенного ниже исторического оператора в oracle db. Не могли бы вы дать мне знать, как исправить приведенную ниже ошибку?

MERGE INTO d_prod_fld dp USING
  (SELECT stg_prod_fld_id,
          prod_cd_id,
          country_name
   FROM stg_prod_fld_delta pd
   LEFT OUTER JOIN d_loc dl ON (dl.prod_cd_num = lpad(pd.prod_cd_id, 3, '0'))
   WHERE pd.efft_to > trunc(sysdate+1)
     AND pd.prod_cd_id IS NOT NULL 
  ) stg 
ON (dp.cd_id = stg.stg_prod_fld_id) 
WHEN matched THEN
UPDATE SET dl.prod_country=stg.country_name;
  • d_prod_fld - целевое измерение table,
  • stg_prod_fld_delta - таблица этапов,
  • d_lo c - поиск таблицы

в основном, когда я пытался выполнить вышеуказанный запрос в песочнице, в которой он выполняется хорошо, но когда я попытался запустить в реальной среде разработки, это показывает вышеупомянутую ошибку -

Ошибка запуска в строке: 1 в команде -

Отчет об ошибке - SQL Ошибка : ORA-30926: невозможно получить стабильный набор строк в исходных таблицах 30926. 00000 - «невозможно получить стабильный набор строк в исходных таблицах»

* Причина: стабильный набор строк мог не может быть получено из-за большой активности dml или недетерминированности c where.

* Действие: Удалите все недетерминированные c, где предложения и переиздайте dml.

...