標準の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)を使用する方法はありますか?