2010-04-27 3 views
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' AND 'TRANSIT ALPHA' 
IS NOT NULL 

나를 혼란스럽게하는 부분은 ASP.ASP_AIRSPACE_NM이 상수에 바로 연결된다는 것입니다.Oracle에서 Postgres 로의 이식 포팅

정상적인 오른쪽 가입을 사용하려면 어떻게 이식 할 수 있습니까?

답변

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' 

관찰 :

  • 선택 목록은 상수로 구성되어 있습니다.

  • 더 영공과 APSMAIN.MISSION_CLASS

  • MISSION_CLASS은 '공중 투하'술어에 의해 필터링 사이에 조인 조건이 없습니다. AIRDROP 행이 없으면 행이 삽입되지 않습니다.

  • 영공 테이블이 분명히 통과 ALPHA 조건에 의해 필터링 입니다. 그러나 외부 조인을 사용하면 항상 적어도 한 행을 반환하지만 행을 여러 개 반환 할 수 있습니다. 다중 통과 ALPHA 열이있는 경우, 삽입 된 행의 수 를 multipleid한다 0 또는 1 TRANSIT 알파 행이 경우

각 투하 행에 하나 개의 행을 삽입한다. 예를 들어, 세 개의 AIRDROP 행과 두 개의 TRANSIT ALPHA 행은 6 개의 행이 삽입되도록합니다.

1

(+)는 오라클 땅에서 외부 조인을 지정합니다.

진술의 평등은 실제로 AIRSPACE 테이블의 데이터에 묶일 것입니다. 솔직히 말해서 (+) 수정자가 실제로이 경우 유용하지는 않습니다. 최적화 도구.