Système d'information:cx_Oracle (Python3.6) requête SQL GROUP BY provoquant ValueError - fonctionne très bien dans SQL Developer
print(cx_Oracle.clientversion())
(12, 2, 0, 1, 0)
print(cx_Oracle.version)
6.0b2
print(sys.version)
3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)]
J'ai une requête en cours d'exécution qui je fonctionne correctement dans SQL Developer soulève cependant une erreur lors de en cours d'exécution en python en utilisant cx_Oracle. Il semble être en quelque sorte lié à la clause GROUP BY car la requête s'exécute dans cx_Oracle lorsque les SUM
et GROUP BY
sont supprimés.
SQL COMMANDE:
SELECT prop_code, forecast, sum(uc_fc) as remaining_fc FROM my_table WHERE prop_code = 'MYPROP' AND stay_Date = '01-MAY-17' GROUP BY prop_code, forecast;
RETURNS dans SQL Developer:
+-------------+------------+-------------------------+
| "PROP_CODE" | "FORECAST" | "REMAINING_FC" |
+-------------+------------+-------------------------+
| MYPROP | 17 | 3858.2210740962656178 |
| MYPROP | 8 | 4599.4697955023602118 |
| MYPROP | 4 | 798.79072149551767364 |
| MYPROP | 7 | 1096.30162478218624302 |
| MYPROP | 18 | 4016.37933889910515332 |
| MYPROP | 1 | 4793.6514493804123866 |
| MYPROP | 2 | 10070.756632866636683 |
| MYPROP | 3 | 29910.550761344399349 |
| MYPROP | 5 | 1820.4588262721241473 |
| MYPROP | 6 | 15406.887917698571224 |
| MYPROP | 99 | 3846.232477937824844934 |
+-------------+------------+-------------------------+
requête SQL en python:
forecast_query = '''SELECT prop_code, forecast, \
sum(uc_fc) as remaining_fc \
FROM OY_UNC_STYDT_FCST_UPD_ARCH \
WHERE prop_code = 'MYPROP' \
AND stay_Date = '01-MAY-17' \
GROUP BY prop_code, forecast'''
et le code pour l'exécuter:
start = time.time()
my_dsn = cx_Oracle.makedsn(host='myhost', port=1560, sid='mysid')
con = cx_Oracle.Connection(user= 'username', password='pass', dsn = my_dsn)
cur = con.cursor()
cur.execute(forecast_query)
forecast_results = cur.fetchall()
con.close()
Retours cette erreur:
ValueError: invalid literal for int() with base 10: '3858.2210740962656178'
Merci pour toute aide!
On dirait que le problème est décrit ici: http://www.orafaq.com/aggregator/sources/450 Pouvez-vous essayer d'utiliser 'to_char (sum (uc_fc))'? – bernie
Bonne trouvaille! C'est exactement le même problème. Le 'to_char' fonctionne. Utiliser 'cast' comme' float' fonctionne aussi mais supprime une partie de la précision. Je suppose que cela doit être dû au fait que le nombre à virgule flottante est trop élevé pour que python puisse le gérer. – Rob
Heureux que ça a aidé! :-) – bernie