CAST en SQL Oracle : conversion de types de données

Découvrez la fonction CAST en SQL Oracle : syntaxe, exemples pratiques et erreurs courantes pour convertir vos types de données efficacement.

Illustration du tutoriel SQL Oracle : CAST en SQL Oracle : conversion de types de données

null

Publicité

La fonction CAST en SQL Oracle : conversion de types de données

La fonction CAST en SQL Oracle est l’un des outils les plus utilisés pour convertir explicitement une valeur d’un type de données vers un autre. Que vous travailliez sur des rapports financiers, des migrations de données ou des interfaces applicatives, maîtriser CAST en SQL Oracle vous permet de garantir la cohérence et la fiabilité de vos requêtes. Ce cours vous guide pas à pas, de la syntaxe aux exemples concrets.

Définition et utilisation de CAST en SQL Oracle

La fonction CAST est une fonction de conversion standard définie par la norme SQL ANSI et pleinement supportée par Oracle. Elle permet de transformer explicitement une expression d’un type source vers un type cible compatible.

Contrairement aux conversions implicites qu’Oracle peut effectuer automatiquement (et qui peuvent parfois produire des résultats inattendus), CAST rend la conversion visible, explicite et contrôlée. C’est une bonne pratique fondamentale dans tout code SQL professionnel.

Cas d’usage en entreprise

  • Rapports et tableaux de bord : convertir un nombre décimal en entier pour l’affichage d’un indicateur clé (KPI).
  • Migration de données : harmoniser des colonnes de types différents issues de systèmes hétérogènes (ERP, CRM, etc.).
  • Interfaces applicatives : formater des données avant leur envoi vers une API ou un fichier d’export (CSV, XML).
  • Calculs conditionnels : convertir une chaîne de caractères en date ou en nombre pour effectuer des comparaisons ou des tris fiables.
  • Jointures entre tables : aligner les types de données de colonnes issues de tables différentes afin d’éviter les erreurs lors d’une jointure.

Syntaxe de la fonction CAST

La syntaxe de la fonction CAST en Oracle est simple et conforme au standard SQL :

CAST(expression AS type_cible)

Détail des paramètres

  • expression : la valeur ou la colonne à convertir. Il peut s’agir d’une colonne de table, d’une constante littérale, du résultat d’une sous-requête scalaire ou d’une expression calculée.
  • AS : mot-clé obligatoire qui sépare l’expression du type cible.
  • type_cible : le type de données Oracle vers lequel vous souhaitez convertir l’expression. Les types les plus couramment utilisés avec CAST sont :
Type cibleDescription
VARCHAR2(n)Chaîne de caractères de longueur variable (n caractères max)
NUMBER(p, s)Nombre avec précision (p) et échelle (s)
DATEDate et heure au format Oracle
TIMESTAMPDate et heure avec fractions de secondes
INTEGERNombre entier (alias de NUMBER(38))
FLOATNombre à virgule flottante
CHAR(n)Chaîne de caractères de longueur fixe

Remarque Oracle : Certains types comme CLOB ou BLOB ne sont pas supportés comme type cible direct dans CAST. Pour ces conversions, Oracle recommande d’utiliser des fonctions dédiées telles que TO_CLOB().

Exemples pratiques de CAST en SQL Oracle

Exemple 1 – Convertir un nombre décimal en entier pour un rapport de ventes

Contexte métier : vous gérez une base de données commerciale et souhaitez afficher le chiffre d’affaires mensuel arrondi à l’entier le plus proche dans un rapport de direction, sans décimales superflues.

-- Sélection du nom du commercial et de son chiffre d'affaires mensuel
-- Le montant décimal est converti en entier grâce à CAST
SELECT
    nom_commercial,
    mois_vente,
    CAST(chiffre_affaires AS INTEGER) AS ca_entier
FROM
    ventes_mensuelles
WHERE
    annee_vente = 2024
ORDER BY
    ca_entier DESC;

Explication : La colonne chiffre_affaires est de type NUMBER(12,2). En appliquant CAST(... AS INTEGER), Oracle tronque la partie décimale (sans arrondi) et retourne un entier. Le rapport est ainsi plus lisible pour les décideurs. Notez qu’il ne s’agit pas d’un arrondi mais d’une troncature : 1999.99 devient 1999.

Exemple 2 – Convertir une date en chaîne de caractères pour un export CSV

Contexte métier : votre application doit exporter des données de commandes vers un fichier CSV. La colonne date_commande est de type DATE, mais le fichier d’export attend une chaîne de caractères au format YYYY-MM-DD.

-- Conversion de la date de commande en chaîne de caractères
-- pour compatibilité avec le format d'export attendu par l'application tierce
SELECT
    numero_commande,
    id_client,
    CAST(date_commande AS VARCHAR2(10)) AS date_commande_texte,
    montant_total
FROM
    commandes
WHERE
    statut = 'EXPEDIEE'
ORDER BY
    date_commande DESC;

Explication : Oracle convertit la valeur DATE en VARCHAR2(10) en utilisant le format de session NLS en cours (généralement DD/MM/YY ou DD-MON-RR selon la configuration). Si vous avez besoin d’un format précis et indépendant de la configuration NLS, il est préférable de combiner CAST avec TO_CHAR : TO_CHAR(date_commande, 'YYYY-MM-DD'). Cette combinaison est la pratique recommandée en environnement de production Oracle.

Publicité

Erreurs courantes avec CAST en SQL Oracle

Erreur ORA-01722 : invalid number

Description : Cette erreur survient lorsque vous tentez de convertir une chaîne de caractères en type numérique (NUMBER, INTEGER, etc.) et que la chaîne contient des caractères non numériques ou un format incompatible.

-- Exemple d'erreur : la valeur 'N/A' ne peut pas être convertie en NUMBER
SELECT CAST('N/A' AS NUMBER) FROM DUAL;
-- Résultat : ORA-01722: invalid number

Solution : Avant d’effectuer la conversion, validez ou filtrez vos données source avec la fonction REGEXP_LIKE ou utilisez une expression CASE pour gérer les valeurs non convertibles :

-- Solution : utiliser CASE pour gérer les valeurs non numériques
SELECT
    CASE
        WHEN REGEXP_LIKE(valeur_texte, '^\d+(\.\d+)?$')
        THEN CAST(valeur_texte AS NUMBER)
        ELSE NULL
    END AS valeur_numerique
FROM
    ma_table;

Cette approche défensive est particulièrement recommandée lors de migrations de données ou d’intégrations avec des systèmes externes dont la qualité des données n’est pas garantie.

Résumé

Point cléDétail
Rôle de CASTConversion explicite d’un type de données vers un autre
SyntaxeCAST(expression AS type_cible)
Types supportésVARCHAR2, NUMBER, INTEGER, DATE, TIMESTAMP, CHAR, FLOAT
NormeConforme SQL ANSI, portable vers d’autres SGBD
Erreur fréquenteORA-01722 lors de la conversion d’une chaîne invalide en nombre
Alternative OracleTO_NUMBER(), TO_DATE(), TO_CHAR() pour plus de contrôle du format

2 bonnes pratiques Oracle avec CAST

  1. Préférez CAST pour la portabilité : si votre code SQL doit être lisible par des équipes habituées à plusieurs SGBD (PostgreSQL, SQL Server, Oracle), utilisez CAST plutôt que les fonctions propriétaires Oracle (TO_NUMBER, TO_CHAR). Cela facilite la maintenance et les revues de code.
  2. Combinez CAST avec TO_CHAR pour les dates : lorsque vous convertissez une date en chaîne, n’utilisez pas CAST seul, car le résultat dépend des paramètres NLS de la session. Utilisez systématiquement TO_CHAR(date_col, 'YYYY-MM-DD') pour garantir un format stable en production.

Aller plus loin

Pour approfondir vos connaissances sur les conversions et la manipulation des types de données en SQL Oracle, nous vous recommandons les cours suivants :

Sur le même thème

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité