Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Syntax – sollten wir uns zwischen Alt und Neu entscheiden müssen?

Ähnliches hier, aber nicht so viele Entwickler und nicht so alter Code. Ich verwende die neueren Sachen, die älteren Jungs verwenden den älteren Stil, aber wir wissen beide, was der andere zu tun versucht.

Persönlich würde ich sagen, dass Sie den Stil wählen, der für den einzelnen Entwickler einfacher zu verwenden ist. Es sei denn, Sie führen Benchmarks durch und finden heraus, dass einer schneller ist als der andere (wie in, genug Unterschied, um signifikant zu sein), und sowohl neue als auch alte die Abfragen lesen und verstehen können, die sie sehen, gibt es keinen Grund, sie zu ändern.

Meine persönliche Meinung wäre jedoch, das alte Zeug so zu lassen, wie es ist, und neue Abfragen mit der neueren Syntax zu schreiben, wie z. B. mit JOIN s und USING und ON usw. sind viel einfacher zu lesen und wissen, was vor sich geht, als eine Menge AND x.col = y.col AND z.col = a.col zu haben im WHERE Abschnitt.

Das, und die neuen Jungs werden wahrscheinlich länger da sein, also werden sie sich irgendwann durchsetzen...

Ein zusätzliches Beispiel

Ich weiß nichts über den Rest von Ihnen, aber ich würde es hassen, versuchen zu müssen, so etwas herauszufinden (oder dies zu schreiben), indem ich den alten Beitrittsstil verwende:

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