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
예외, 그러나:
- 구문 오류 아닌가요?
- 누가 이 행동을 설명해 줄 수 있습니까?
작동 데모는 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
'programing' 카테고리의 다른 글
jQuery를 사용하여 Safari 검색 (0) | 2023.11.05 |
---|---|
jQuery를 사용하여 하나의 태그를 다른 태그로 바꾸기 (0) | 2023.11.05 |
선언하기 전에 구조를 입력합니다. (0) | 2023.11.05 |
WHERE 문이 작동하지 않음 (0) | 2023.10.31 |
"host.docker.internal"과 동등한 리눅스란 무엇입니까? (0) | 2023.10.31 |