Портирование соединения от Oracle до Пост-ГРЭС

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 прав соединенный с константой.

Как я могу портировать это для использования нормального правильного соединения?

1
задан mainstringargs 28 April 2010 в 01:45
поделиться

2 ответа

Немного поправили форматирование.

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 приведут к вставке шести строк.

1
ответ дан 3 September 2019 в 00:58
поделиться

Это не совсем то же самое - (+) указывает внешнее соединение в стране Oracle.

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

1
ответ дан 3 September 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: