Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Rukovanje aliasima i detekcija dvosmislenih polja u Firebird 2.0

Dmitry Yemanov, 9-нов-2007

Обрада алијаса и детектовање двосмислених поља је побољшано у Firebird 2.0.

Промене:

а) Када је алијас присутан на табели, тај алијас мора бити коришћен или се не сме користити ниједан алијас,

само име табеле више није важеће.

б) Поља без квалификатора сада могу бити коришћена на вишем нивоу опсега. Сопствени ниво опсега

се проверава прво и провера двосмислених поља се врши на нивоу опсега.

Аутор:

Arno Brinkman

Примери:

а)

Када је алијас присутан, мора се користити или се не сме користити ниједан алијас.

Овај упит је био дозвољен у 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 записа.

б)

Ово није успевало у 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