Oracle
 sql >> база данни >  >> RDS >> Oracle

Синтаксис на Oracle - трябва ли да избираме между старото и новото?

Подобно нещо тук, но не толкова много разработчици и не толкова стар код. Аз използвам по-новите неща, по-старите момчета използват по-стария стил, но и двамата знаем какво се опитва да направи другият.

Лично аз бих казал, че изберете стила, който е по-лесен за използване от отделния разработчик. Освен ако не стартирате сравнителни тестове и не откриете, че единият е по-бърз от другия (както е достатъчна разлика, за да бъде значителна), и както новите, така и старите могат да четат и разбират заявките, които виждат, няма причина да ги променяте.

Моят личен вот обаче би бил да оставя старите неща такива, каквито са, и да пиша нови заявки, използвайки по-новия синтаксис, като използвайки JOIN s и USING и ON и т.н. са много по-лесни за четене и знаят какво се случва, след това имат куп AND x.col = y.col AND z.col = a.col в WHERE раздел.

Това и новите момчета вероятно ще останат по-дълго, така че в крайна сметка ще постигнат своето...

Добавен пример

Не знам за останалите от вас, но не бих искал да се опитвам да измисля нещо подобно (или да напиша това), използвайки стария стил на присъединяване:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли разлика между !=и <> в Oracle Sql?

  2. WHERE CURRENT OF в PL/SQL

  3. OCIEnvNlsCreate() е неуспешно. Когато се опитам да свържа моята база данни oracle в php

  4. Как да запиша Unicode данни в oracle?

  5. Извличане на данни в рамките на период от време в Oracle