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 |