私は簡単なクエリを実行しようとすると、Pythonでこのエラーメッセージが表示されます。そして、私はこのクエリを少し変更すると、その大丈夫です。だから、これはそれがどのように見えるかです:あなたが見ることができるよう、値がパラメータのみの場合はデータ型が不明です
ので>>> import fdb
>>> cnx = fdb.connect(dsn = "C:\data\REESTR.FDB", user = "sysdba", password = "masterkey")
>>> cnx.begin()
>>> cursor = cnx.cursor()
>>> query = "SELECT CASE WHEN 'val_1' = 'val_1' THEN ? ELSE 'val_2' END AS TXT FROM TEST_TABLE"
>>> dat = ('val_1',)
>>> cursor.execute(query, dat) # this query works ok
<fdb.fbcore.Cursor object at 0x0000000002FEC978>
>>> # now let's change the query a liitle bit:
>>> query = "SELECT CASE WHEN 'val_1' = 'val_1' THEN ? ELSE ? END AS TXT FROM TEST_TABLE"
>>> dat = ('val_1', 'val_2',)
>>> cursor.execute(query, dat)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\site-packages\fdb-1.6-py3.4.egg\fdb\fbcore.py", line 3573, in execute
self._ps = PreparedStatement(operation, self, True)
File "C:\Python34\lib\site-packages\fdb-1.6-py3.4.egg\fdb\fbcore.py", line 2182, in __init__
"Error while preparing SQL statement:")
fdb.fbcore.DatabaseError: ('Error while preparing SQL statement:\n- SQLCODE: -804\n-
Dynamic SQL Error\n- SQL error code = -804\n-
Data type unknown', -804, 335544569)
、私は、クエリのELSE
一部のための1つの追加の準備の変数を追加しました。 THEN
パートの準備がうまくいくので、すべてが非常に奇妙に見えます。このクエリではフィールドを使用しないので、テーブルのスキーマについて私に尋ねることはできません。したがって、どのテーブルでもこのエラーを再現できます。
PROOF
ヒント:テーブルのDDLを投稿したくない場合は、「このクエリでフィールドを使用しないので、テーブルのスキーマについて私に尋ねないかもしれませんあなたはテーブルでこのエラーを再現することができます。この場合は、代わりに 'RDB $ DATABASE'を使用して回避することもできます。他の場合は、テーブルが関連する場合は必要最小限のDDLを投稿するだけです。 –
チップをありがとう! – Jacobian