2017-02-27 28 views
1

私はPythonスクリプトとPyodbcモジュールを使用して呼び出しているストアドプロシージャを持っています。コードは次のようになります。pythonでストアドプロシージャの出力をキャプチャpyodbc

import pyodbc 
pyodbc.pooling=False 
oConnexion = pyodbc.connect("driver={Teradata};dbcname=myServer;DefaultDatabase=myDB;uid=myUser;pwd=myPassword;charset=utf8;", autocommit=True) 
oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8') 
oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8') 
oConnexion.setencoding(encoding='utf-8') 
oCursor = oConnexion.cursor() 
oQueryRegisterBatch = "CALL DEV_AUDIT.SP_AUDIT_BATCH('ED_DATA_QUALITY_MANUAL', 'REGISTER', '1900-01-01 00:00:00.000000', '2999-12-31 00:00:00.000000');" 
oCursor.execute(oQueryRegisterBatch) 
for row in oCursor: 
    print (row) 

ストアドプロシージャは新しいレコードを作成し、レコードID(BATCH_KEY)を返します。 Teradataでストアドプロシージャを実行すると、正しくBATCH_KEYが返されますが、Pythonでキャプチャできません。私は、値の代わりに、次のエラーメッセージが表示されます。

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
pyodbc.ProgrammingError: No results. Previous SQL was not a query. 

私は、ストアドプロシージャを呼び出した後、テーブルの上に照会することによってBATCH_KEYを取得することができますが、私は避けたいです。ストアドプロシージャの出力をキャプチャする方法を教えてください。 pyodbcパッケージのドキュメントを1として

おかげ

+0

pyodbc Wikiページ[こちら](https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures)には、匿名コードブロックを使用してSQL Serverを実行する方法が示されています。 TeradataのSQL構文を微調整することで、おそらく同様のアプローチを使用することができます。 –

答えて

1

、ストアドプロシージャの出力をキャプチャすることはできません。これはここに記載されています:https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures

pyodbcは現在、オプションの.callprocメソッドを実装していません。

ストアドプロシージャへの呼び出しをクエリに埋め込むデータベースエンジンによっては、回避策があります。

pyodbcには.callprocがありません。 の出力パラメータと戻り値の値を取得するための回避策を使用する必要があります。 特定の方法は、特定のODBCドライバ がサポートするものによって異なりますが、MicrosoftのODBCドライバのSQL Serverでは、 EXECストアドプロシージャを実行するための「匿名コードブロック」を使用し、次に出力パラメータおよび/または戻り値を選択してください。 。

上記のリンクで詳細を参照してください。

関連する問題