Questa pagina è stata tradotta automaticamente. Leggi l'originale in inglese. English

Libreria IBSurgeon

Gestione degli alias e rilevamento dei campi ambigui in Firebird 2.0

Dmitry Yemanov, 9-Nov-2007

La gestione degli alias e il rilevamento dei campi ambigui sono stati migliorati in Firebird 2.0.

Modifiche:

a) Quando è presente un alias su una tabella, deve essere usato quell’alias oppure nessun alias

del tutto; il solo nome della tabella non è più valido.

b) I campi senza qualificatore possono ora essere usati a un livello di scope superiore. Il proprio

livello di scope viene controllato per primo e il controllo dei campi ambigui viene eseguito a livello di scope.

Autore:

Arno Brinkman

Esempi:

a)

Quando è presente un alias, deve essere usato oppure non deve essere usato alcun alias.

Questa query era consentita in FB1.5 e versioni precedenti:

SELECT

RDB$RELATIONS.RDB$RELATION_NAME

FROM

RDB$RELATIONS R

ma ora segnalerà correttamente un errore indicando che il campo

“RDB$RELATIONS.RDB$RELATION_NAME” non è stato trovato.

Usare questa (preferita):

SELECT

R.RDB$RELATION_NAME

FROM

RDB$RELATIONS R

oppure questa istruzione:

SELECT

RDB$RELATION_NAME

FROM

RDB$RELATIONS R

L’istruzione seguente ora userà correttamente il FieldID dalla subselect

e dalla tabella in aggiornamento:

UPDATE

TableA

SET

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

In Firebird è possibile assegnare un alias a un’istruzione UPDATE, ma molti

altri vendor di database non supportano questa funzionalità. Queste istruzioni SQL

sono ora meglio intercambiabili con altri prodotti SQL.

Questo esempio non funzionava correttamente in FB1.5 e versioni precedenti:

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)

Se RDB$RELATIONS contiene 90 record, restituirebbe 90 * 90 = 8100 record,

ma in FB2.0 restituirà correttamente 90 record.

b)

Questo falliva in FB1.5, ma è possibile in FB2.0:

SELECT

(SELECT RDB$RELATION_NAME FROM RDB$DATABASE)

FROM

RDB$RELATIONS

Controllo dell’ambiguità nelle subselect. La query seguente veniva eseguita in FB1.5

senza segnalare ambiguità, ma in FB2.0 la segnalerà:

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