Casting in eine Domain oder deren Typ
Firebird 2.1 und höher unterstützen das Casting in eine Domäne oder deren Basistyp.Beim Casting in eine Domain müssen alle für die Domain deklarierten Constraints (NOT NULL
und/oder CHECK
) erfüllt sein, sonst schlägt das Casting fehl.Bitte beachten Sie, dass ein CHECK
erfolgreich ist, wenn es als TRUE
oder NULL
ausgewertet wird!Also folgende Aussagen gegeben:
create domain quint as int check (value >= 5000);
select cast (2000 as quint) from rdb$database; -- (1)
select cast (8000 as quint) from rdb$database; -- (2)
select cast (null as quint) from rdb$database; -- (3)
nur die Besetzungsnummer 1 führt zu einem Fehler.
Wenn der Modifikator TYPE OF
verwendet wird, wird der Ausdruck in den Basistyp der Domäne umgewandelt, wobei alle Einschränkungen ignoriert werden.Mit der oben definierten Domain 'quint' sind die folgenden beiden Casts äquivalent und werden beide erfolgreich sein:
select cast (2000 as type of quint) from rdb$database;
select cast (2000 as int) from rdb$database;
Wenn TYPE OF
mit einem (VAR)CHAR
-Typ verwendet wird, werden sein Zeichensatz und seine Kollatierung beibehalten:
create domain iso20 varchar(20) character set iso8859_1;
create domain dunl20 varchar(20) character set iso8859_1 collate du_nl;
create table zinnen (zin varchar(20));
commit;
insert into zinnen values ('Deze');
insert into zinnen values ('Die');
insert into zinnen values ('die');
insert into zinnen values ('deze');
select cast(zin as type of iso20) from zinnen order by 1;
-- Ergebnis Deze -> Die -> deze -> die
select cast(zin as type of dunl20) from zinnen order by 1;
-- Ergebnis deze -> Deze -> die -> Die
Warning
|
Wenn die Definition einer Domain geändert wird, können bestehende |