このページは機械翻訳されています。英語の原文をお読みください。 English

IBSurgeon ライブラリ

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ではUPDATEステートメントにエイリアスを付けることが可能ですが、他の多くのデータベースベンダーではこれはサポートされていません。これらの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