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正在加入常量。
如何移植它以使用正常的右连接?
答案 0 :(得分:1)
它不完全相同 - (+)指定了Oracle的外部联接。
语句的相等性实际上将与AIRSPACE表中的数据相关联,但老实说阅读语句我不认为(+)修饰符在这种情况下实际上做了一些有用的事情,除了可能会抛弃优化
答案 1 :(得分:1)
稍微整理一下格式。
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过滤 谓语。然而与外面 加入,它至少会回来 一行,但可能会返回多个 行。
如果有零个或一个TRANSIT ALPHA行,它将为每个AIRDROP行插入一行 如果有多个TRANSIT ALPHA行,则插入的行数将为multipleid。例如,三个AIRDROP行和两个TRANSIT ALPHA行将导致插入六行。