Nano Hash - криптовалюты, майнинг, программирование

Существует ли автоматический способ преобразования синтаксиса соединения Oracle (+) в стандартный синтаксис соединения?

Преобразование из Oracle в PostgreSQL требует большого количества SQL для преобразования синтаксиса соединения Oracle "(+)" в стандартный синтаксис соединения. Есть ли автоматический способ - инструмент - сделать это? За исключением этого, есть ли какие-либо практические правила, которые можно использовать при таком преобразовании?

Например, преобразовать это:

SELECT
    request.requestId
FROM
    request,
    incident,
    changeRequest
WHERE
    incident.requestId = request.requestId AND 
    changeRequest.requestId = request.requestId(+)
/

к этому

SELECT
    request.requestId
FROM
    request
    INNER JOIN incident ON incident.requestId = request.requestId
    LEFT OUTER JOIN changeRequest ON changeRequest.requestId = request.requestId;

  • Кажется, вы понимаете правила. Я рекомендую обновить объединения в Oracle, протестировать их, а затем перенести код в Postgres. 10.09.2019
  • Запрашивать ресурсы вне SO не по теме. (Удачи вам в поиске четкого и полного описания семантики (+) в документации Oracle, публикациях, блогах и т. д., включая руководство по добавлению функциональности 12c или чьи-либо обоснованные догадки где-либо еще. Если вам это удастся, дайте мне знать.) 10.09.2019
  • Тем не менее - это часто задаваемые вопросы. Прежде чем рассматривать публикацию, пожалуйста, всегда гуглите свое сообщение об ошибке или много четких, кратких и точных формулировок вашего вопроса/проблемы/цели, с вашими конкретными строками/именами и без них, и читайте много ответов. Если вы публикуете вопрос, используйте одну фразу в качестве заголовка. См. раздел Как задать вопрос и тексты при наведении указателя мыши на стрелку голосования. (Например, Oracle (Old?) Joins — инструмент/скрипт для преобразования?) 10.09.2019
  • Небольшое эмпирическое правило, которое я использовал, чтобы понять, что старое соединение в стиле соединения было/есть: плюс (+) идет на стороне, которую вы допускаете для нехватки данных. Я бы опубликовал и объяснил пару примеров, но в качестве комментария это было бы противно и очевидно, ваш вопрос о том, как сделать что-то, что вы не совсем понимаете, иногда выходит за рамки. 12.09.2019

Ответы:


1

Вот алгоритм:

  • Если у вас есть x.a = y.b(+) в предложении WHERE, поверните

    FROM x, y
    

    to

    FROM x LEFT JOIN y ON x.a = y.b
    
  • аналогично с e(+) слева и RIGHT JOIN.

10.09.2019
  • Это даже не относится к примеру в вопросе. Также неясно, к каким случаям он предназначен. 11.09.2019
  • У меня сложилось впечатление, что ответ Stackoverflow должен быть в целом полезен. Я думал, что дело очевидно: перепишите запрос Oracle со страшным (+) в нем. 11.09.2019
  • Я не понимаю, как этот комментарий является ответом на мой. Я только что сказал, что вы охватываете только особый случай, и вам это не ясно, и это не так в примере в вопросе. У этого есть 3 соединенных таблицы и соединение в том, где. Не говоря уже об общем случае n таблиц и произвольного условия. Возможно, вы подумали, что я имел в виду, что это не относится к конкретному примеру в вопросе; Я имел в виду, что это даже не относится к примеру в вопросе. 11.09.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..