2015-02-18 2 views
0

Попал в проблему «Компонент« Y »должен быть объявлен« пока он объявлен ». Как код должен быть исправлен?Компонент «Y» должен быть объявлен (обновить другую таблицу одним компонентом)

Таблица AB имеет переменную PN, такую ​​же, что и у PARTS. Или, может быть, есть другой способ обновить таблицу с другой информацией о таблице, когда соответствует pn?

DECLARE 
 
    CURSOR C1 IS 
 
    SELECT * FROM AB LEFT JOIN PARTS ON AB.PN=PARTS.PN where AB.FH_FC_WOF = 'FH' AND AB.OPERATION = 'OH' AND ab.pn=parts.pn ; 
 
BEGIN 
 
FOR i in C1 
 
LOOP 
 
    UPDATE PARTS 
 
    SET PARTS.OH_HOURS = i.FLIGHT_DURATION 
 
    WHERE PARTS.PN=i.PN; 
 
END LOOP; 
 
    COMMIT; 
 
END;

+1

Комментарий: «ГДЕ ... И ab.pn = parts.pn» делает LEFT JOIN вести себя как обычное соломенное соединение. Если вы действительно хотите внешнее соединение, переместите это условие в предложение ON! – jarlh

+0

Спасибо, мне нужно использовать курсор. Уже решена проблема, которая была в операции соединения, я не мог выбрать *, так как тогда у нее есть два столбца с одинаковыми данными. – orangutangas

ответ

0

ли вам действительно нужен курсор? Разве вы не можете просто ОБНОВИТЬ:

Возможно ли, что подвыбор может вернуться более чем на 1 строку? Если это так, вы можете перейти на = (select MAX(FLIGHT_DURATION) или ограничить результат одной строкой каким-либо другим способом (FETCH FIRST и т. Д.)

+0

Спасибо, мне нужно использовать курсор. Уже решена проблема, которая была в операции соединения, я не мог выбрать *, так как тогда у нее есть два столбца с одинаковыми данными – orangutangas

Смежные вопросы