IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[8i][forms 6i] résultat arrondi par EXEC_SQL ?


Sujet :

Oracle

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut [8i][forms 6i] résultat arrondi par EXEC_SQL ?
    Bonsoir,

    Malgré mes recherches et sûrement à cause des heures sup' je ne trouve pas la cause d'un problème que j'imagine assez trivial.

    Dans une unité de programme sous forms 6i, je souhaite effectuer un calcul basique :
    <OPERANDE_1> <OPERATEUR> <OPERANDE_2>
    sachant que les valeurs de ces 3 éléments sont stockés dans des variables

    L'utilisation d'un curseur provoque une ORA-06502 et EXECUTE IMMEDIATE ne fonctionne pas sous forms (ou sous cette version ou bien encore parce que je débute)

    Par conséquent, j'utilise le package EXEC_SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    	LConn_conn_id := EXEC_SQL.DEFAULT_CONNECTION;
    	LCu_b0337 := EXEC_SQL.OPEN_CURSOR(LConn_conn_id);
    	LC_sql_stmt := 'SELECT ' || LN_an1_montant1 || LC_t37_symbolcal || LN_an1_montant2 || ' FROM DUAL';
    	EXEC_SQL.PARSE(LConn_conn_id, LCu_b0337, LC_sql_stmt);
    	EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_b0337, 1, LN_resultat_calcul);
    	LI_nIgn := EXEC_SQL.EXECUTE(LConn_conn_id, LCu_b0337);
    	WHILE ( EXEC_SQL.FETCH_ROWS(LConn_conn_id, LCu_b0337) > 0 ) LOOP
    		EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_b0337, 1, LN_resultat_calcul);
    	END LOOP;
    	EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_b0337);
    	EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
    ...
    La requête s'exécute correctement mais je ne comprends pas pourquoi le résultat est systématiquement un entier alors que je lui fournis des réels.

    Ex : SELECT 10.5 + 2.7 FROM DUAL retournera 12 au lieu de 13.2

    Où est mon erreur ?
    Merci.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_b0337, 1, LN_resultat_calcul);
    Comment avez-vous défini LN_resultat_calcul ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Salut SheikYerbouti et merci de votre attention

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      LN_resultat_calcul  	NUMBER(8, 4);
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    J'avais déjà commis cette erreur et mes collègues viennent de m'aider à comprendre mon erreur.

    Quand je fournis en paramètre pour cette opération :
    22 / '+' / 21.5
    voici ce qui est effectué :
    - sur le serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 22+21.5 FROM DUAL;
    qui retourne un réel = 43.5
    - en débug, en local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 22+21,5 FROM DUAL;
    qui retourne 2 colonnes :
    43 5
    Conclusion : le développement et le débug en local ne sont que des étapes intermédiaires pour livrer un écran fonctionnel sur le serveur donc le problème n'existe même pas.
    Ceci dit, il est possible de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_sql_stmt := REPLACE(LC_sql_stmt, ',', '.');
    pour garantir que la requête exécutée par le serveur ne dépend pas des paramètres régionaux - qui sont différents entre le serveur et mon poste.

    Désolé encore pour cette erreur, probablement triviale pour vous autres.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat commençant par un chiffre avec requête SELECT
    Par nicolas.pissard dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2010, 13h31
  2. Arrondi par exces
    Par edhos dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 01h15
  3. PSQLException "Aucun résultat retourné par la requête&q
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/09/2005, 20h55
  4. limiter le résultat retourné par le count
    Par SuperFoustan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2003, 12h10
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo