2017-07-28 1 views
0

標準のDB2テーブル関数でJupyter Notebookを使用しています。私は他のSQLステートメントで1つのSQLステートメントから返された値を参照できるようにしたいと思います。変数参照の構文は私にここで取得しています。これは私が私が後文で使用する値を取得するために使用するコードです:Jupyter NotebookでSQL Magicを使用して、別のSQL文で1つのSQL文からの戻り値を使用する

mgd_baseline = %sql select float(rows_read) rows_read \ 
    , float(rows_returned) rows_returned \ 
    from table(mon_get_database(-2)) as mgd 

それから私はこのようにそれを使用したいと思います:

if mgd_baseline[0].rows_read > 0 or mgd_baseline[0].rows_returned > 0: 
    %sql select decimal((float(rows_read)-:mgd_baseline[0].rows_read/(float(rows_returned)-:mgd_baseline[0].rows_returned),10,0) read_eff \ 
    from table(mon_get_database(-2)) as mgd 

しかし、それは、このエラーメッセージで失敗します。これは、SQLの魔法のように私には見えます

(ibm_db_dbi.ProgrammingError) ibm_db_dbi::ProgrammingError: SQLNumResultCols failed: [IBM][CLI Driver][DB2/NT64] SQL0104N An unexpected token "," was found following "-?[0].rows_returned)". Expected tokens may include: ")". SQLSTATE=42601\r SQLCODE=-104 [SQL: 'select decimal((float(rows_read)-?[0].rows_read/(float(rows_returned)-?[0].rows_returned),10,0) read_eff  from table(mon_get_database(-2)) as mgd'] [parameters: ([(61959.0, 3219.0)], [(61959.0, 3219.0)])] 

は値に、私はそれが期待する道を渡していません。ホスト変数名の末尾に角括弧があると考えているようです。私はそれを動作させるために使用することができる表記法を知るために、Pythonにはあまり馴染んでいません。

私は回避策としてこれを行うことができます知っている:

if mgd_baseline[0].rows_read > 0 or mgd_baseline[0].rows_returned > 0: 
    bl_rows_read=mgd_baseline[0].rows_read 
    bl_rows_returned=mgd_baseline[0].rows_returned 
    read_eff=%sql select decimal((float(rows_read)-:bl_rows_read)/(float(rows_returned)-:bl_rows_returned),16,2) read_eff \ 
    from table(mon_get_database(-2)) as mgd 

により、いくつかの将来の計画に、私は追加の割り当てを行う必要はありませんことを好むだろう。

それらを再割り当てすることなく、それらの値を直接私のSQLの魔法のSQLステートメントで(、mgd_baseline [0] .rows_returned mgd_baseline [0] .rows_read)を使用する方法はありますか?

答えて

0

私はそれを理解しました。ホスト変数(パッケージ・キャッシュ使用のために異なる値を持つ汎用コンパイル)は使用していませんが、この特定のアプリケーションではホスト変数として扱われているかどうかは特に気にしません。ここに何が動作します:

if mgd_baseline[0].rows_read > 0 or mgd_baseline[0].rows_written > 0: 
    read_eff=%sql select decimal((float(rows_read)-{mgd_baseline[0].rows_read})/(float(rows_returned)-{mgd_baseline[0].rows_returned}),16,2) read_eff \ 
    from table(mon_get_database(-2)) as mgd 
関連する問題