In diesem Anhang finden Sie Themen, auf die sich Entwickler beziehen können, um das Verständnis für Funktionen oder Änderungen zu verbessern.
In diesem Anhang finden Sie Themen, auf die sich Entwickler beziehen können, um das Verständnis für Funktionen oder Änderungen zu verbessern.
RDB$VALID_BLR
Das Feld RDB$VALID_BLR
wurde zu den Systemtabellen RDB$PROCEDURES
und RDB$TRIGGERS
in Firebird 2.1 hinzugefügt.Sein Zweck ist, eine mögliche Ungültigkeit eines PSQL-Moduls nach einer Änderung einer Domäne oder Tabellenspalte, von der das Modul abhängt, zu signalisieren.RDB$VALID_BLR
wird auf 0 gesetzt, sobald der Code einer Prozedur oder eines Triggers ungültig durch eine solche Änderung wird.
Bei Triggern und Prozeduren ergeben sich Abhängigkeiten durch die Definitionen der Tabellenspalten, auf die zugegriffen wird, und auch über alle Parameter oder Variablen, die im Modul mit der TYPE OF
-Klausel definiert wurden.
Nachdem die Engine jede Domain, einschließlich der impliziten Domains, die intern hinter den Spaltendefinitionen und den Ausgabeparametern erstellt wurden, geändert hat, werden alle ihre Abhängigkeiten intern neu kompiliert.
Note
|
In V.2.x beinhaltet dies Prozeduren und Trigger, jedoch keine Blöcke, die in DML-Anweisungen für die Laufzeitausführung mit |
Jedes Modul, das aufgrund einer Inkompatibilität aufgrund einer Domänenänderung nicht neu kompiliert werden kann, wird als ungültig markiert (“invalidated” durch Setzen von RDB$VALID_BLR
in seinem System Record (in RDB$PROCEDURES
oder RDB$TRIGGERS
, wie zutreffend) auf Null.
Eine erneute Validierung (Einstellung von RDB$VALID_BLR
auf 1) erfolgt, wenn
die Domäne wird erneut geändert und die neue Definition ist mit der zuvor ungültig gemachten Moduldefinition kompatibel; ODER
das zuvor ungültig gemachte Modul wird geändert, um der neuen Domänendefinition zu entsprechen
Die folgende Abfrage findet die Module, die von einer bestimmten Domäne abhängen und meldet den Status ihrer RDB$VALID_BLR
-Felder:
SELECT * FROM (
SELECT
'Procedure',
rdb$procedure_name,
rdb$valid_blr
FROM rdb$procedures
UNION ALL
SELECT
'Trigger',
rdb$trigger_name,
rdb$valid_blr
FROM rdb$triggers
) (type, name, valid)
WHERE EXISTS
(SELECT * from rdb$dependencies
WHERE rdb$dependent_name = name
AND rdb$depended_on_name = 'MYDOMAIN')
/* Replace MYDOMAIN with the actual domain name.
Use all-caps if the domain was created
case-insensitively. Otherwise, use the exact
capitalisation. */
Die folgende Abfrage zeigt alle Module an, die von einer bestimmten Tabellenspalte abhängig sind, und gibt deren RDB$VALID_BLR
-Status aus:
SELECT * FROM (
SELECT
'Procedure',
rdb$procedure_name,
rdb$valid_blr
FROM rdb$procedures
UNION ALL
SELECT
'Trigger',
rdb$trigger_name,
rdb$valid_blr
FROM rdb$triggers) (type, name, valid)
WHERE EXISTS
(SELECT *
FROM rdb$dependencies
WHERE rdb$dependent_name = name
AND rdb$depended_on_name = 'MYTABLE'
AND rdb$field_name = 'MYCOLUMN')
Important
|
Alle durch Domänen-/Spaltenänderungen verursachten PSQL-Ungültigkeiten werden im Feld
|
Note
|
Weitere Hinweise
|
Important
|
Diese Anmerkung über Gleichheits- und Ungleichheits-Operatoren gilt überall in der Firebird SQL-Sprache. |
Der “=
”-Operator, welcher ausdrücklich in vielen Bedingungen verwendet wird, prüft nur Werte gegen Werte.Entsprechend dem SQL-Standard, ist NULL
kein Wert und somit sind zwei NULLs
weder gleich noch ungleich zueinander.Wenn Sie NULLs
in Bedingungen vergleichen müssen, nutzen Sie den Operator IS NOT DISTINCT FROM
.Dieser gibt wahr zurück, falls die Operanden den gleichen Wert besitzen oder beide NULL
sind.
select *
from A join B
on A.id is not distinct from B.code
In Fällen in denen Sie gegen NULL
innerhalb einer ungleich-Bedingung testen wollen, nutzen Sie IS DISTINCT FROM
, nicht “<>
”.Möchten Sie NULL
unterschiedlich zu anderen Werten und zwei NULLs
als gleich betrachten:
select *
from A join B
on A.id is distinct from B.code