sql >> Databasteknik >  >> RDS >> Oracle

Oracle-syntax – ska vi behöva välja mellan det gamla och det nya?

Liknande här, men inte lika många devs och inte lika gamla av kod. Jag använder de nyare grejerna, de äldre killarna använder den äldre stilen, men vi vet båda vad den andra försöker göra.

Personligen skulle jag säga gå med vilken stil som är lättare för den enskilda utvecklaren att använda. Om du inte kör benchmarks och tar reda på att den ena är snabbare än den andra (som i, tillräckligt stor skillnad för att vara betydande), och både nya och gamla kan läsa och förstå de frågor de ser, finns det ingen anledning att ändra dem.

Men min personliga röst skulle vara att lämna de gamla sakerna som de är och skriva nya frågor med den nyare syntaxen, som att använda JOIN s och USING och ON etc. är mycket lättare att läsa och veta vad som händer, och sedan ha en massa AND x.col = y.col AND z.col = a.col i WHERE avsnitt.

Det, och de nya killarna kommer förmodligen att finnas kvar längre, så de kommer att få sin vilja igenom så småningom...

Ett tillagt exempel

Vet inte hur det är med er andra, men jag skulle hata att försöka komma på något sånt här (eller skriva det här) med den gamla stilen att gå med:

SELECT DISTINCT product_zone_map_id, zh.name_english, zh.name_french, zone_id, ad.attribute_value_english AS bullprep_region_type,
        product_zone_type_id, ad.attribute_value_english, language_english, product_code, office_code,
        (
            SELECT attribute_value_english
            FROM presentation p JOIN presentation_details ad USING(presentation_id)
            WHERE dimension_id = 4
              AND object_id = product_zone_map_id
              AND attribute_type = 'BULLPREP PARENT ID'
              AND p.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
              AND (p.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR p.usage_end_date IS NULL)
        ) AS bullprep_parent_id,
        (
            SELECT attribute_value_english
            FROM presentation p JOIN presentation_details ad USING(presentation_id)
            WHERE dimension_id = 4
              AND object_id = product_zone_map_id
              AND attribute_type = 'BULLPREP GROUP ID'
              AND p.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
              AND (p.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR p.usage_end_date IS NULL)
        ) AS bullprep_group_id, product_zone_seq
FROM zone z JOIN zone_history zh ON(z.zone_id = zh.zone_id)
     JOIN product_zone_map pzm ON(z.zone_id = pzm.zone_id)
     JOIN product USING(product_id)
     JOIN product_history ph USING(product_id)
     JOIN language_reference USING(language_id)
     LEFT OUTER JOIN product_zone_attribute_details pzad USING(product_zone_map_id)
     LEFT OUTER JOIN attribute_details ad USING(attribute_id)
     JOIN zone_geocode_map USING(zone_id)
     JOIN geocode USING(geocode_id)
WHERE zh.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
  AND (zh.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR zh.usage_end_date IS NULL)
  AND pzm.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
  AND (pzm.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR pzm.usage_end_date IS NULL)
  AND (attribute_type = 'BULLPREP REGION TYPE' OR attribute_type IS NULL)
  AND product_id = 2075
ORDER BY product_zone_seq



  1. Är JPA (EclipseLink) anpassade typer möjliga?

  2. Ändra meddelande med SQL Server 2008

  3. Ansluter Ms Access Db till Mysql via Vba

  4. PostgreSQL hur man sammanfogar intervallvärdet '2 dagar'