Firebird 2.0'da takma ad işleme ve belirsiz alan algılama
Dmitry Yemanov, 9-Nov-2007
Firebird 2.0’da takma ad (alias) işleme ve belirsiz alan tespiti iyileştirilmiştir.
Değişiklikler:
a) Bir tabloda takma ad varsa, bu takma ad kullanılmalı veya hiç takma ad kullanılmamalıdır; yalnızca tablo adı artık geçerli değildir.
b) Nitelik belirteci olmayan alanlar artık daha üst bir kapsam düzeyinde kullanılabilir. Kendi kapsam düzeyi önce kontrol edilir ve belirsiz alan kontrolü kapsam düzeyinde yapılır.
Yazar:
Arno Brinkman
Örnekler:
a)
Bir takma ad varsa, ya takma ad kullanılmalı ya da hiç takma ad kullanılmamalıdır.
Bu sorgu FB1.5 ve önceki sürümlerde izin veriliyordu:
SELECT
RDB$RELATIONS.RDB$RELATION_NAME
FROM
RDB$RELATIONS R
ancak artık “RDB$RELATIONS.RDB$RELATION_NAME” alanının bulunamadığına dair bir hata doğru şekilde raporlanacaktır.
Bunu kullanın (tercih edilen):
SELECT
R.RDB$RELATION_NAME
FROM
RDB$RELATIONS R
veya bu ifade:
SELECT
RDB$RELATION_NAME
FROM
RDB$RELATIONS R
Aşağıdaki ifade artık FieldID’yi alt sorgudan ve güncellenen tablodan doğru şekilde kullanacaktır:
UPDATE
TableA
SET
FieldA = (SELECT SUM(A.FieldB) FROM TableA A WHERE A.FieldID = TableA.FieldID)
Firebird’de bir update ifadesine takma ad vermek mümkündür, ancak diğer birçok veritabanı satıcısı bunu desteklemez. Bu SQL ifadeleri artık diğer SQL veritabanı ürünleriyle daha iyi değiştirilebilir durumdadır.
Bu örnek FB1.5 ve önceki sürümlerde doğru çalışmıyordu:
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 kayıt içeriyorsa, 90 * 90 = 8100 kayıt döndürürdü, ancak FB2.0’da doğru şekilde 90 kayıt döndürecektir.
b)
Bu FB1.5’te başarısız oluyordu, ancak FB2.0’da mümkündür:
SELECT
(SELECT RDB$RELATION_NAME FROM RDB$DATABASE)
FROM
RDB$RELATIONS
Alt sorgularda belirsizlik kontrolü. Aşağıdaki sorgu FB1.5’te belirsizlik raporlamadan çalışıyordu, ancak FB2.0’da raporlayacaktır:
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