2015-06-04 20 views
9

Wczoraj natknąłem się na dziwne zachowanie na przykładzie Oracle 10g klientów. Niektóre procedury, które napisałem, dały mi wyjątek invalid identifier, ale działały dobrze na moich instancjach Oracle 11g.Podwójny/losowy alias w klauzuli select na Oracle 11g nie generuje wyjątku wyjątku identyfikatora

Stosowne zapytanie było coś jak następuje:

select b.b.v_col_b 
from tbla a 
left join tblb b on a.pk_col_a = b.fk_a; 

Podniesione uwagę na b.b.v_col_b część zapytania. Zmiana z left join do inner join czy wreszcie podnieść ORA-00904: "B"."B"."V_COL_B": invalid identifier wyjątek, ale:

  1. Czy to nie jest błąd składni?
  2. Czy ktoś może wyjaśnić to zachowanie?

Demo pracy można znaleźć na sqlfiddle

EDIT: Dodano definicję tabeli:

create table tbla (
    pk_col_a int primary key, 
    v_col_a varchar2(50)); 

create table tblb (
    pk_col_b int primary key, 
    fk_a int, 
    v_col_b varchar2(50)); 

Edit2: AS @ LalitKumarB jest wymienione to tylko wydaje się stać na Oracle 11g

+0

wybiera również: 'wybrać k.b.v_col_b z tbla lewo dołączyć tblb b na a.pk_col_a = b.fk_a;' Weird –

+0

więc masz kolumna o nazwie 'b.v_col_b'? – Arion

+0

@Arion, nie, zobacz skrzypce ... –

Odpowiedz

0

ORA-00904: "B". "B". "V_COL_B": nieprawidłowy identyfikator

W SQL wykwalifikowany identyfikator XYZ dotyczy na schemacie X, Y stół, a kolumna Z. mając na uwadze prostą YZ oznacza tabeli Y, kolumny Z.

A potem dzwoni XYZ identyfikator może być mylące zbyt, ale niezbyt nieregularne w informatyce.

Jeśli chodzi o zachowanie związane z błędami, nie mogę powiedzieć wiele.

1

Gratulacje, znalazłeś błąd :)

w tym konkretnym przypadku można napisać cokolwiek chcesz po wybraniu jednej z kolumn tblb:

select helloworld.b.v_col_b, mghjfghj.b.fk_a, asdasdas.b.pk_col_b 
from tbla a 
left join tblb b on a.pk_col_a = b.fk_a; 

Można nawet zrobić z prawe dołączenie:

select helloworld.b.v_col_b, mghjfghj.b.fk_a, asdasdas.b.pk_col_b 
from tblb b 
right join tbla a on a.pk_col_a = b.fk_a; 

Nie będzie jednak działać ze składnią Oracle dołączania (notacja (+)).

Nie jest to oczekiwane zachowanie i, jak zauważył Lalit w komentarzach, jest ustalone w 12C. Jeśli chcesz, możesz zgłosić prośbę o usunięcie błędu z pomocą techniczną Oracle. Może jest już na to łatka.