2010-11-26 24 views
3

Lorsque j'exécute une extraction à partir d'une base de données Oracle à l'aide de PHP OCI, les nombres inférieurs à 1 sont affichés comme suit: .XXXXXX,. .249999. Y at-il un moyen de définir ceci à 0.XXXXXX ou à tout autre format, sans modifier chaque requête pour utiliser to_char() explicitement? (? Peut-être par certains paramètres de session)PHP OCI, Oracle et le format de nombre par défaut

Répondre

0

Il n'y a aucun moyen de faire ce que vous demandez globalement à court de modifier le code source php/oci-extension. La raison de ce comportement est que oracle oci omet les 0 dans les résultats et php convertit tous les résultats des oci en chaînes sans effectuer de conversion en fonction du type de données de la colonne. Même les résultats dans SQL * Plus omettent 0 par défaut et la mise en forme SQL * Plus doit être appelée avec set numformat pour personnaliser la mise en forme des colonnes et ajouter des 0 au préfixe.

Il n'existe actuellement aucun paramètre alter session que vous pouvez définir pour modifier ce comportement. La manière la plus courante de contourner ce problème consiste à utiliser un wrapper autour de vos requêtes et à rechercher des colonnes numériques avec is_numeric, puis à mettre en forme les valeurs de colonnes numériques avec number_format ou sprintf. Espérons que votre application utilise déjà un wrapper autour des fonctions de stock php oci afin que vous puissiez effectuer le changement en un seul endroit.

2

En utilisant PHP, vous pouvez facilement ajouter 0, en convertissant flotter:

$a = '.249999'; 
echo (float) $a; 

qui signifie que vous pouvez convertir votre numéro par

$row['number'] = (float) $row['number']; 

après l'aller chercher de la DB.

+0

Merci pour la réponse, mais je cherche un moyen de le changer globalement. Nous avons beaucoup de questions qui devraient être changées, et ce serait trop d'effort. – Dario