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