Ieri mi sono imbattuto in qualche strano comportamento su un'istanza Oracle 10g clienti. Qualche procedura che ho scritto mi ha dato un'eccezione invalid identifier
, ma andava bene sulle mie istanze Oracle 11g.Nome alias doppio/casuale nella clausola select su Oracle 11g non genera un'eccezione di identificatore non valida
La query rilevante era qualcosa di simile al seguente:
select b.b.v_col_b
from tbla a
left join tblb b on a.pk_col_a = b.fk_a;
Motivi di notare la parte b.b.v_col_b
della query. Cambiare left join
-inner join
ha finalmente sollevare un'eccezione ORA-00904: "B"."B"."V_COL_B": invalid identifier
, ma:
- Non è presente un errore di sintassi?
- Qualcuno può spiegare questo comportamento?
Una demo di lavoro può essere trovato sulla sqlfiddle
Edit: Aggiunta la definizione della tabella:
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: Come @ LalitKumarB ha parlato di questo sembra accadere solo su Oracle 11g
Seleziona anche: 'selezionare k.b.v_col_b da TBLA un LEFT JOIN tblb b sul a.pk_col_a = b.fk_a;' Strano –
Così avete una colonna chiamata 'b.v_col_b'? – Arion
@Arion, no, guarda il violino ... –