Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

Gestion des alias et détection des champs ambigus dans Firebird 2.0

Dmitry Yemanov, 9-Nov-2007

La gestion des alias et la détection des champs ambigus ont été améliorées dans Firebird 2.0.

Modifications :

a) Lorsqu’un alias est présent sur une table, cet alias doit être utilisé ou aucun alias du tout, le nom de table seul n’est plus valide.

b) Les champs sans qualificatif peuvent désormais être utilisés à un niveau de portée supérieur. Le niveau de portée propre est vérifié en premier et la détection des champs ambigus est effectuée au niveau de la portée.

Auteur :

Arno Brinkman

Exemples :

a)

Lorsqu’un alias est présent, il doit être utilisé ou aucun alias du tout ne doit être utilisé.

Cette requête était autorisée dans FB1.5 et les versions antérieures :

SELECT

RDB$RELATIONS.RDB$RELATION_NAME

FROM

RDB$RELATIONS R

mais signalera désormais correctement une erreur indiquant que le champ

“RDB$RELATIONS.RDB$RELATION_NAME” n’a pas pu être trouvé.

Utilisez ceci (préféré) :

SELECT

R.RDB$RELATION_NAME

FROM

RDB$RELATIONS R

ou cette instruction :

SELECT

RDB$RELATION_NAME

FROM

RDB$RELATIONS R

L’instruction ci-dessous utilisera désormais correctement le FieldID de la sous-sélection

et de la table mise à jour :

UPDATE

TableA

SET

FieldA = (SELECT SUM(A.FieldB) FROM TableA A WHERE A.FieldID = TableA.FieldID)

Dans Firebird, il est possible de donner un alias à une instruction UPDATE, mais chez

de nombreux autres fournisseurs de bases de données, cela n’est pas pris en charge. Ces instructions SQL sont

désormais mieux interchangeables entre d’autres produits de bases de données SQL.

Cet exemple ne s’exécutait pas correctement dans FB1.5 et les versions antérieures :

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)

Si RDB$RELATIONS contient 90 enregistrements, cela renvoyait 90 * 90 = 8100 enregistrements,

mais dans FB2.0, cela renverra correctement 90 enregistrements.

b)

Cela échouait dans FB1.5, mais est possible dans FB2.0 :

SELECT

(SELECT RDB$RELATION_NAME FROM RDB$DATABASE)

FROM

RDB$RELATIONS

Vérification de l’ambiguïté dans les sous-sélections. La requête ci-dessous s’exécutait dans FB1.5

sans signaler d’ambiguïté, mais la signalera dans 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