J'essaie d'écrire une instruction select avec CAST, mais je ne sais pas comment mettre la valeur flottante.

Cela ne fonctionne pas:

SELECT
  field1, field2,
  CAST( field3 AS FLTP ) * CAST( '0.03' AS FLTP )  AS out2  
FROM table1
INTO TABLE @DATA(lt_table1).

Je reçois ce message d'erreur: CASTs to a numeric type are not allowed for '0.03' (the type is incorrect), donc je suppose que tout ce qui est entre guillemets est supposé être du texte.

J'ai trouvé cette solution de contournement:

DATA: lv_discount TYPE f VALUE '0.03'.

SELECT
  field1, field2,
  CAST( field3 AS FLTP ) * CAST( @lv_flt AS FLTP ) AS out1
FROM table1
INTO TABLE @DATA(lt_table1).

Comment puis-je le faire sans cette solution de contournement?

0
András 17 janv. 2017 à 01:14

2 réponses

Meilleure réponse

ABAP ne prend pas en charge les points décimaux dans les littéraux numériques, et ils doivent être spécifiés dans les littéraux de caractères, comme proposé ici.
Le piège est que l'opérateur CAST ne prend pas en charge les littéraux de caractères comme son aide à la syntaxe dit:

Pour l'opérande opérande , colonnes col des tables ou vues de la base de données plus les variables hôtes dobj et les littéraux de tous les types numériques sauf les nombres décimaux à virgule flottante sont possibles .

La solution de contournement possible pourrait être la suivante:

SELECT matnr, menge,
  CAST( menge AS FLTP ) * CAST( 3 AS FLTP ) / CAST( 100 AS FLTP ) AS out2
FROM mseg
INTO TABLE @DATA(lt_table1).
1
Suncatcher 17 janv. 2017 à 14:47

Pourtant, une meilleure alternative consiste à utiliser des expressions ABAP dans Open SQL

   SELECT
      field1, field2,
      CAST( field3 AS FLTP ) * @( conv f( '0.03' ) ) AS out1
    FROM table1
    INTO TABLE @DATA(lt_table1).
0
kilian 11 oct. 2017 à 22:12