programing

Oracle 11g의 select 절에 있는 이중/랜덤 별칭 이름이 잘못된 식별자 예외를 던지지 않습니다.

subpage 2023. 11. 5. 14:40
반응형

Oracle 11g의 select 절에 있는 이중/랜덤 별칭 이름이 잘못된 식별자 예외를 던지지 않습니다.

어제 고객 Oracle 10g 인스턴스에서 이상한 동작을 발견했습니다.제가 작성한 절차에 의하면invalid identifier예외지만 Oracle 11g 인스턴스에서는 정상적으로 실행되고 있었습니다.

관련 쿼리는 다음과 같습니다.

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

질의 부분을 참고해주시기 바랍니다.에서 변경중left join로.inner join마침내 키웠습니다.ORA-00904: "B"."B"."V_COL_B": invalid identifier예외, 그러나:

  1. 구문 오류 아닌가요?
  2. 누가 이 행동을 설명해 줄 수 있습니까?

작동 데모는 sqlfiddle에서 찾을 수 있습니다.

편집: 테이블 정의 추가:

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));

편집2: @LalitKumarB가 언급했듯이 이것은 Oracle 11g에서만 발생하는 것으로 보입니다.

축하합니다, 버그를 발견하셨습니다 :)

해당 경우 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;

오른쪽 조인을 사용할 수도 있습니다.

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;

그러나 Oracle join 구문(+ 표기)에서는 작동하지 않습니다.

그것은 예상된 행동이 아니며 랄릿이 코멘트에서 언급했듯이 12C에 고정되어 있습니다.원하는 경우 Oracle Support에 버그 요청을 할 수 있습니다.아마도 이미 패치가 있는 것 같습니다.

ORA-00904: "B"B"."V_COL_B": 잘못된 식별자

SQL에서 정규화된 식별자 X.Y.Z는 스킴 X, 테이블 Y, 열 Z와 관련이 있습니다.반면에 단순 Y.Z는 표 Y, 열 Z를 의미합니다.

그리고 X에게 전화를 합니다.Y.Z 식별자도 오해의 소지가 있겠지만, 컴퓨터 과학에서 너무 불규칙적이지는 않습니다.

당신이 경험한 오류 행동에 대해서 나는 많은 것을 알 수 없습니다.

언급URL : https://stackoverflow.com/questions/30636902/double-random-alias-name-in-select-clause-on-oracle-11g-does-not-throw-invalid-i

반응형