Обновить запрос не удается правильно обновить - Oracle - PullRequest
1 голос
/ 05 ноября 2011

Следуя моему более раннему запросу Запрос на обновление , я переписал весь запрос следующим образом:

Таблица A связана с таблицей B отношением один ко многим на [PRD_ID, PRD_VER, PY_ID, TPY_ID], а таблица C связана с таблицей B отношением один к одному на [PRD_GTIN_ID]. Мне нужно скопировать столбцы X, Y, Z в таблице A в X, Y, Z в таблице C

DECLARE CURSOR eachRec IS 
SELECT  cgl.prd_gtin_id,
        tc.PRD_SPL_OR_QTY_MULTIPLE
FROM B cgl,
     A tc
WHERE cgl.prd_id       = tc.prd_id
  AND cgl.prd_ver      = tc.prd_ver
  AND cgl.py_id        = tc.py_id
  AND cgl.tpy_id       = tc.tpy_id;

BEGIN
  FOR EACH_ROW IN eachRec
  LOOP
    UPDATE C
    SET    C.PRD_ORDER_QTY_MULTIPLE=EACH_ROW.PRD_ORDER_QTY_MULTIPLE
    WHERE  C.prd_gtin_id = EACH_ROW.prd_gtin_id;
  END LOOP;
END;

Запрос, помимо обновления правильных совпадений, также обновляет случайные строки, что неверно. Если кто-нибудь может помочь мне найти проблему с вопросом, который я написал?

1 Ответ

1 голос
/ 06 ноября 2011

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

Поскольку это нетривиальные предметы, и Oracle хорошо справляется с ними, описывая их в документации, я просто укажу вам соответствующую документацию: http://download.oracle.com/docs/cd/E11882_01/server.112/e25494/views001.htm#ADMIN11782

Если вы можете прочесть и понять эти концепции, не должно возникнуть проблем с выполнением того, что вы хотите, с помощью одного оператора обновления, который будет более понятным и простым для понимания, а также гораздо более быстрым и эффективным. 1006 *

Надеюсь, это поможет.

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