Неоднозначный набор результатов Oracle - PullRequest
1 голос
/ 18 января 2012

Я работаю с устаревшим SQL, который не очень хорошо написан. Есть неоднозначные отборы, которые, кажется, дают результаты, которые мы ожидаем по большей части, но не всегда.

Вот упрощенный пример того, о чем я говорю:

create table T1(
  A                 VARCHAR2(10),
  B                 VARCHAR2(10),
  C                 VARCHAR2(10),
  D                 VARCHAR2(10)
  )

create table T2(
  A                 VARCHAR2(10),
  B                 VARCHAR2(10)
  )

insert into T1(A, B, C, D)
values ('AA', 'BB', 'CC', 'DD' )

insert into T2(A, B)
values ('Y', 'N' )

Пока ничего необычного, кроме используемых запросов ...

  SELECT * FROM T1, T2 WHERE T2.A ='Y'

    A B   C   D   A_1 B_1
    AA    BB  CC  DD  Y   N


  SELECT * FROM T2, T1 WHERE T2.A ='Y'

    A B   A_1 B_1 C   D
    Y N   AA  BB  CC  DD

Это явно неоднозначно, и Oracle пытается помочь нам, уточняя столбцы с суффиксом _1, где это необходимо. Существуют ли обстоятельства, когда Oracle справится с этим по-другому? Например, разные версии и т. Д.

Например, в первом запросе значение поля A равно «AA», но могут ли быть обстоятельства, когда этот же запрос установит для поля A значение «Y»?

Существующая кодовая база имеет такие вещи повсюду, и ее нужно будет исправить, а сейчас я просто пытаюсь оценить, насколько это серьезная проблема? Я в основном обеспокоен тем, что один и тот же SQL, запущенный для разных версий Oracle, может дать разные результаты.

Спасибо!

РЕДАКТИРОВАТЬ: Для ясности план состоит в устранении неоднозначности запросов. На данный момент вопрос в том, как различные версии Oracle справятся с этим?

1 Ответ

2 голосов
/ 18 января 2012

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

выберите * против выберите столбец

Конечно, я знаю, что некоторые разработчики приводятпредложил бы, «если это не сломано, не исправляйте это», но вы не тот парень, верно?

...