sql >> Database teknologi >  >> RDS >> Oracle

Oracle-konverterer SQL til ANSI SQL

Dette afsnit er sandsynligvis årsag til problemet:

  FROM BOM_CHILDS C
     , XX_MAIN.XX_MAST MAST
     , XX_MAIN.XX_STPO STPO
  WHERE C.MATNR = MAST.MATNR(+)
   AND MAST.STLNR = STPO.STLNR(+)
   AND MAST.STLAN(+) = '1'
   AND MAST.WERKS(+) = C.WERKS
   AND STPO.IDNRK IS NULL

For at gøre dette lidt nemmere, lad os omarrangere WHERE klausul for at sortere tabellerne efter, hvordan de relaterer sig:

FROM BOM_CHILDS C
 , XX_MAIN.XX_MAST MAST
 , XX_MAIN.XX_STPO STPO
-- Joining C to MAST
WHERE C.MATNR = MAST.MATNR(+)
  AND C.WERKS = MAST.WERKS(+)
  AND MAST.STLAN(+) = '1'
-- Joining MAST to STPO
  AND MAST.STLNR = STPO.STLNR(+)
  AND STPO.IDNRK IS NULL

Vi har C sluttet sig til MAST ved hjælp af C som "driver"-tabellen og henter data fra MAST hvor det matcher (en venstre join):

FROM BOM_CHILDS C
LEFT JOIN XX_MAIN.XX_MAST MAST
  ON C.MANTR = MAST.MANTR
 AND C.WERKS = MAST.WERKS
 AND MAST.STLAN = '1'

Så skal vi tilføje STPO til sammenføjningerne:

LEFT JOIN XX_MAIN.XX_STPO STPO
  ON MAST.STLNR = STPO.STLNR
 AND STPO.IDNRK IS NULL

Når vi sætter det hele sammen får vi:

FROM BOM_CHILDS C
LEFT JOIN XX_MAIN.XX_MAST MAST
  ON C.MANTR = MAST.MANTR
 AND C.WERKS = MAST.WERKS
 AND MAST.STLAN = '1'
LEFT JOIN XX_MAIN.XX_STPO STPO
  ON MAST.STLNR = STPO.STLNR
 AND STPO.IDNRK IS NULL

Når det er sagt , selvom (+) virker til venstre/højre/ydre joinforbindelser, Oracle anbefaler ikke bruge det :




  1. Introduktion til Slowly Changing Dimensions (SCD)

  2. Quartz JDBCJobStore problemer med MySQL

  3. Hvordan får du tabelformateret output fra MySQL i ikke-interaktiv tilstand?

  4. konvertering af en varchar-datatype til en datetime-datatype resulterede i en værdi uden for området