2017-06-09 11 views
1

システム情報に細かい動作します:私はSQL Developerで正常に動作し、私は実行しているクエリがしかし、ときにエラーを発生させていCx_Oracle(Python3.6)SQLクエリのGROUPとValueErrorを引き起こしBY - 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)] 

cx_Oracleを使用してPythonで動作します。 SUMGROUP BYが削除されたときにクエリがcx_Oracleで実行されるため、GROUP BY句に何とか関係しているようです。

SQLコマンド:SQL Developerで

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:Pythonで

+-------------+------------+-------------------------+ 
| "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 | 
+-------------+------------+-------------------------+ 

SQLクエリ:

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''' 

そして、それを実行するためのコード:

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() 

戻り、このエラー:任意の助け

ValueError: invalid literal for int() with base 10: '3858.2210740962656178' 

ありがとう!

+0

問題は次のように見えます:http://www.orafaq.com/aggregator/sources/450 'to_char(sum(uc_fc)) 'を使用できますか? – bernie

+0

良い発見!それは全く同じ問題です。 'to_char'は動作します。 'cast'を' float'としても動作させますが、精度の一部を削除します。私はこれは、浮動小数点は、処理するために、Pythonのためにあまりにも多くの数字が原因であると思います。 – Rob

+0

うれしかったよ! :-) – bernie

答えて

0

CASTfloatという引数に強制して実行させることができました。なぜ私はcx_Oracleが他の方法でクエリを処理できないのか分かりません。おそらくバグでしょうか?

働くSQLクエリ:

forecast_query = '''SELECT prop_code, demand_forecast_segment_id, \ 
cast(sum(uc_fc) as float) as remaining_fc \ 
FROM MY_TABLE\ 
WHERE prop_code = 'MYPROP' \ 
AND stay_Date = '01-MAY-17' \ 
GROUP BY prop_code, forecast'''