SET BIND
Modifier la liaison de type. Assurer la compatibilité avec les anciens clients.
SET BIND OF {<type-from> | TIME ZONE} TO { <type-to> | LEGACY | EXTENDED | NATIVE }
Paramètre | Description |
---|---|
type-from |
Le type de données pour lequel la règle de conversion est spécifiée. |
type-to |
Le type de données à convertir. |
Cet opérateur vous permet de définir des règles pour décrire les types retournés au client d’une manière non standard — le type type-from est automatiquement converti en type type-to.
Si une définition de type incomplète est utilisée (par exemple, CHAR
au lieu de CHAR(n)
) sur le côté gauche de l’induction SET BIND OF
,alors la conversion sera faite pour toutes les colonnes CHAR
, et pas seulement CHAR(1)
.
Le type spécial incomplet TIME ZONE
dénote tous les types, à savoir {TIME | TIMESTAMP} WITH TIME ZONE
.Lorsqu’une définition de type incomplète est utilisée dans la partie droite de la déclaration (la partie TO
),le serveur définira automatiquement les détails manquants de ce type sur la base de la colonne d’origine.
La modification de la liaison d’un type NUMERIC
et DECIMAL
n’affecte pas le type entier sous-jacent correspondant.Inversement, la modification de la liaison d’un type de données entier affecte également les NUMERIC
et DECIMAL
correspondants.
Le mot-clé LEGACY
dans la partie TO
est utilisé lorsqu’un type de données non présent dans une version précédente de Firebird doit être représenté d’une manière compréhensible pour un logiciel client plus ancien (une certaine perte de données peut se produire). Il existe les conversions suivantes pour les types LEGACY
:
Type natif | Type d’héritage |
---|---|
BOOLEAN |
CHAR(5) |
DECFLOAT |
DOUBLE PRECISION |
INT128 |
BIGINT |
TIME WITH TIME ZONE |
TIME WITHOUT TIME ZONE |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP WITHOUT TIME ZONE |
L’utilisation de EXTENDED
dans la partie TO
force Firebird à utiliser le formulaire de type étendu dans la partie FROM.Actuellement, cela ne fonctionne que pour {TIME | TIMESTAMP} WITH TIME ZONE
— ils sont appliquésen EXTENDED {TIME | TIMESTAMP} WITH TIME ZONE
.
Mettre NATIVE
signifie que le type sera utilisé comme s’il n’y avait pas de règles de conversion précédentes pour lui.
La même fonctionnalité peut être obtenue en utilisant le tag isc_dpb_set_bind
dans DPB.En outre, la conversion de type vers les anciens types disponibles dans les versions précédentes de Firebird peut être définie à l’aide du paramètre DataTypeCompatibility
dans firebird.conf ou databases.conf.Plus la règle est entrée tard (.conf
→ DPB → SQL), plus sa priorité est élevée.
SET BIND OF
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE; --native
CAST ======================= 123.45
SET BIND OF DECFLOAT TO DOUBLE PRECISION;
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE; --double
CAST ======================= 123.4500000000000
SET BIND OF DECFLOAT(34) TO CHAR;
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE; --toujours double
CAST ======================= 123.4500000000000
SELECT CAST('123.45' AS DECFLOAT(34)) FROM RDB$DATABASE; --text
CAST ========================================== 123.45
SET BIND OF TIME ZONE TO EXTENDED
S’il n’y a pas de bibliothèque ICU du côté client, le résultat de la prochaine requête sera erroné
SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE;
CURRENT_TIMESTAMP ========================================================= 2020-02-21 16:26:48.0230 GMT*
Afin d’obtenir la valeur du décalage horaire par rapport à l’heure GMT, procédez comme suit
SET BIND OF TIME ZONE TO EXTENDED;
SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE;
CURRENT_TIMESTAMP ========================================================= 2020-02-21 19:26:55.6820 +03:00