Moulage explicite et implicite
La distribution implicite est l'utilisation de règles internes pour tenter d'évaluer et de traiter les déclarations qui contiennent des types de données mixtes. Cela peut s'avérer utile lors de l'utilisation d'une fonction qui attend un type de données particulier, ou lors de l'émission d'une requête qui compare des valeurs similaires mais de types de données différents. Le langage SQL de Netezza Performance Server est aligné sur la norme SQL pour la distribution implicite des types de données.
Par exemple, dans l'instruction suivante, les deux expressions peuvent être des noms de colonnes, des littéraux ou des expressions plus complexes :
SELECT * FROM tbl WHERE <character expression> > <integer expression>;Comme une expression de caractère est comparée à une expression d'entier, l'expression de caractère est implicitement convertie en entier.Parfois, la distribution implicite échoue parce que les données ne peuvent pas être analysées de manière à ce qu'elles soient conformes au nouveau type de données. (Par exemple, la chaîne de caractères "abc" ne peut être analysée comme un nombre entier ou une date) Dans ce cas, utilisez la fonction "
cast pour convertir explicitement les données dans le type de données approprié. Par exemple, si la colonne âge contient des données de caractères qui représentent des valeurs entières, convertissez ces données en données entières comme suit :SELECT * FROM tbl WHERE cast(age as integer) > 3;Exemples de messages d'erreur émis en cas d'échec de la distribution implicite :
- Lorsqu'une expression ne peut pas être analysée comme un nombre entier :
ERROR : pg_atoi : error in "abc" : can't parse "abc"
- Lorsqu'une expression de caractères ne peut pas être analysée comme une valeur de date :
ERREUR : Mauvaise représentation externe de la date 'abc'
Cette erreur peut résulter de déclarations telles queSELECT * FROM tbl WHERE <date expression> = <character expression>;INSERT INTO <table having one column of type date> SELECT <character expression> FROM <another table>;
- Lorsqu'une expression de caractère ne peut pas être analysée comme une valeur numérique :
ERREUR : 65524 : Erreur de plage de précision
Par exemple, lorsqu'une expression tente de multiplier un numeric(24,4) par un varchar(50), le système tente de convertir implicitement le varchar en numeric(24,4). Toutefois, si la variable varchar contient trop de chiffres, cela peut entraîner une erreur de plage de précision.