INSERT INTO MISSION_OBJECTIVE( MSN_INT_ID, MO_INT_ID, MO_MSN_CLASS_NM,
MO_MSN_CLASS_CD, MO_MSN_TYPE, MO_PRIORITY, MO_COMMENT, MO_START_DT,
MO_END_DT, ASP_AIRSPACE_NM, MO_OBJ_LOCATION, MO_ALO_LEG_ID,
MO_ALO_ARRIVE_LOC) SELECT '1025', '1', 'AIRDROP', 'ADP', 'LAPES', NULL,
COALESCE( NULL, ' '), TO_TIMESTAMP( '1002260900', 'YYMMDDHH24MI'),
TO_TIMESTAMP( '1002260915', 'YYMMDDHH24MI'), 'TRANSIT ALPHA', 'TRANSIT ALPHA', '1', 'TRANSIT ALPHA'
FROM AIRSPACE ASP, apsmain .MISSION_CLASS MC WHERE ASP.ASP_AIRSPACE_NM(+)= 'TRANSIT ALPHA'
AND MC.MCS_MISSION_CLASS_NAME= 'AIRDROP' AND 'TRANSIT ALPHA'
IS NOT NULL
Часть, которая смущает меня, - то, что asp ASP_AIRSPACE_NM прав соединенный с константой.
Как я могу портировать это для использования нормального правильного соединения?
Немного поправили форматирование.
INSERT
INTO MISSION_OBJECTIVE
(
MSN_INT_ID, MO_INT_ID, MO_MSN_CLASS_NM, MO_MSN_CLASS_CD,
MO_MSN_TYPE, MO_PRIORITY, MO_COMMENT, MO_START_DT,
MO_END_DT, ASP_AIRSPACE_NM, MO_OBJ_LOCATION, MO_ALO_LEG_ID,
MO_ALO_ARRIVE_LOC
)
SELECT '1025', '1', 'AIRDROP', 'ADP',
'LAPES', NULL, COALESCE( NULL, ' '), TO_TIMESTAMP( '1002260900', 'YYMMDDHH24MI'),
TO_TIMESTAMP( '1002260915', 'YYMMDDHH24MI'), 'TRANSIT ALPHA', 'TRANSIT ALPHA', '1',
'TRANSIT ALPHA'
FROM AIRSPACE ASP, apsmain .MISSION_CLASS MC
WHERE ASP.ASP_AIRSPACE_NM(+) = 'TRANSIT ALPHA'
AND MC.MCS_MISSION_CLASS_NAME= 'AIRDROP'
Наблюдения:
Список SELECT состоит только из констант.
Нет условия соединения между AIRSPACE и APSMAIN.MISSION_CLASS
MISSION_CLASS фильтруется предикатом 'AIRDROP'. Если нет строк AIRDROP , то строки не будут вставлены .
Таблица AIRSPACE очевидно отфильтрована предикатом TRANSIT ALPHA . Однако при внешнем соединении он всегда будет возвращать как минимум одну строку, но может возвращать несколько строк .
Будет вставлена одна строка для каждой строки AIRDROP, если имеется ноль или одна строка TRANSIT ALPHA Если имеется несколько строк TRANSIT ALPHA, количество вставленных строк будет кратным. Например, три строки AIRDROP и две строки TRANSIT ALPHA приведут к вставке шести строк.
Это не совсем то же самое - (+) указывает внешнее соединение в стране Oracle.
Равенство операторов действительно будет связано с данными в вашей таблице AIRSPACE, хотя, честно говоря, я не думаю, что модификатор (+) действительно делает что-то полезное в этом случае, кроме, вероятно, отбрасывает оптимизатор.