Firebird 2.0에서 별칭 처리 및 모호한 필드 감지
Dmitry Yemanov, 2007년 11월 9일
Firebird 2.0에서 별칭 처리와 모호한 필드 감지 기능이 개선되었습니다.
변경 사항:
a) 테이블에 별칭이 있는 경우 해당 별칭을 사용하거나 아예 별칭을 사용하지 않아야 하며, 테이블 이름만 사용하는 것은 더 이상 유효하지 않습니다.
b) 한정자 없는 필드는 이제 더 높은 범위 수준에서 사용할 수 있습니다. 자체 범위 수준이 먼저 확인되며 모호한 필드 검사는 범위 수준에서 수행됩니다.
작성자:
Arno Brinkman
예제:
a)
별칭이 있는 경우 해당 별칭을 사용하거나 아예 별칭을 사용하지 않아야 합니다.
이 쿼리는 FB1.5 및 이전 버전에서 허용되었습니다:
SELECT
RDB$RELATIONS.RDB$RELATION_NAME
FROM
RDB$RELATIONS R
하지만 이제 “RDB$RELATIONS.RDB$RELATION_NAME” 필드를 찾을 수 없다는 오류를 올바르게 보고합니다.
다음을 사용하세요(권장):
SELECT
R.RDB$RELATION_NAME
FROM
RDB$RELATIONS R
또는 다음 문:
SELECT
RDB$RELATION_NAME
FROM
RDB$RELATIONS R
아래 문은 이제 하위 선택과 업데이트 대상 테이블의 FieldID를 올바르게 사용합니다:
UPDATE
TableA
SET
FieldA = (SELECT SUM(A.FieldB) FROM TableA A WHERE A.FieldID = TableA.FieldID)
Firebird에서는 업데이트 문에 별칭을 지정할 수 있지만, 다른 많은 데이터베이스 공급업체에서는 이를 지원하지 않습니다. 이러한 SQL 문은 이제 다른 SQL 데이터베이스 제품 간에 더 잘 호환됩니다.
이 예제는 FB1.5 및 이전 버전에서 올바르게 실행되지 않았습니다:
SELECT
RDB$RELATIONS.RDB$RELATION_NAME,
R2.RDB$RELATION_NAME
FROM
RDB$RELATIONS
JOIN RDB$RELATIONS R2 ON
(R2.RDB$RELATION_NAME = RDB$RELATIONS.RDB$RELATION_NAME)
RDB$RELATIONS에 90개의 레코드가 포함된 경우 90 * 90 = 8100개의 레코드를 반환했지만, FB2.0에서는 올바르게 90개의 레코드를 반환합니다.
b)
이것은 FB1.5에서 실패했지만 FB2.0에서는 가능합니다:
SELECT
(SELECT RDB$RELATION_NAME FROM RDB$DATABASE)
FROM
RDB$RELATIONS
하위 선택에서의 모호성 검사. 아래 쿼리는 FB1.5에서 모호성을 보고하지 않고 실행되었지만 FB2.0에서는 보고합니다:
SELECT
(SELECT
FIRST 1 RDB$RELATION_NAME
FROM
RDB$RELATIONS R1
JOIN RDB$RELATIONS R2 ON
(R2.RDB$RELATION_NAME = R1.RDB$RELATION_NAME))
FROM
RDB$DATABASE