1

以下は、Windows システム上の IBM Informix ODBC ドライバを介して SQLRunner 内で実行しようとしているクエリです。DB 自体は別の場所でホストされています。

SELECT keycolumnA AS 'Entity', datacol1, datacol2 WHERE keycolumnA IN ('ABC', 'DE f')

クエリが「ODBC エラー」で失敗する

ただし、 Entityから引用符を削除すると、クエリは機能しますが、列名は小文字で返されます。最初の列が大文字の E を持つエンティティとして返されることが重要です。

接続文字列を「DSN=myDSN; DELIMIDENT=y;」に設定してみました。成功せずに。

セットアップ: IBM Informix ドライバー バージョン: Windows 2003 上の 3.7。

4

1 に答える 1

1

区切り識別子にするためには、名前を一重引用符ではなく二重引用符で囲む必要があります。したがって、表示されている接続文字列を使用して、以下に示すようにクエリを作成すると、「うまくいくはずです」(有名な最後の言葉):

SELECT keycolumnA AS "Entity", datacol1, datacol2
  FROM RandomlyNamedTable   -- NB: Not present in original query!
 WHERE keycolumnA IN ('ABC', 'DE f');

要素と呼ばれるテーブルを含むデータベースでテストされました(要素のテーブルに関するデータを保存します):

 SELECT Atomic_Number AS "Entity", Name AS Name, Symbol AS "Symbol"
  FROM Elements   -- NB: Not present in original query!
 WHERE Symbol IN ('Fe', 'He');

Entity  | name      | Symbol
INTEGER | CHAR(20)  | CHAR(3)
26      | Iron      | Fe
2       | Helium    | He

'Entity' と 'Symbol' の名前は、必要に応じて大文字になっていることに注意してください。二重引用符が一重引用符に置き換えられた場合、クエリは失敗しました

SELECT Atomic_Number AS 'Entity', Name AS Name, Symbol AS 'Symbol'
  FROM Elements   -- NB: Not present in original query!
 WHERE Symbol IN ('Fe', 'He');
SQL -201: A syntax error has occurred.

これは DELIMIDENT が設定されていた...DELIMIDENT が設定されていない場合、「表示ラベル」を囲む単一引用符と二重引用符の両方が構文エラーで失敗しました。

Mac OS X 10.7.5 上の IBM Informix Dynamic Server 11.70.FC2 に対するテスト。(プログラムは ESQL/C を使用して作成されましたが、重要ではありません。)

于 2012-10-12T17:27:19.783 に答える