OCI でコンパイルされたクライアント: 10.2.0.4.0
サーバー: Oracle9i Enterprise Edition リリース 9.2.0.4.0
問題のあるクエリは次のとおりです。
SELECT CODIGO FROM LOG WHERE TEL = :telnumber AND DATE_PROC = '05-JUL-08'
テーブルの説明:
SQL>describe LOG;
TEL NOT NULL VARCHAR2(15)
CODIGO NOT NULL VARCHAR2(20)
DATE_PROC NOT NULL DATE
シンプルに見えるかもしれませんが、SQLPlus を使用してサーバー上で直接実行すると結果が返されますが、OCI を使用するアプリから実行すると、このクエリはOCI_NO_DATA
always を返します。最初は、日付の値もプレースホルダーでしたが、リテラル like を指定しても機能しないことがわかりました'05-JUL-08'
。私は次のことを試しました:
- 私は基本を試しました: クライアントから DB にクエリを実行すると機能します。困ったのはこいつだ
以下は機能します:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber
ALTER SESSION SET NLS_DATE_FORMAT="DD-MM-YYYY";
サーバーとクライアントの両方でクエリの前に実行します。同じ結果: サーバーはデータを返し、クライアントはOCI_NO_DATA
DATE_PROC
これを の使用と組み合わせて、フォーマットを変更しようとしましたTO_DATE()
。同じ結果です。- 探した、探した、探した。答えがありません
答えを見つけるのに少し必死です。助けていただければ幸いです。必要に応じて、さらに多くの詳細を提供できます。ありがとう。
---詳細情報---
update log set DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS') where CODIGO='BancoOne';
trunc() と「alter session set nls_date_format」を使用してさまざまな組み合わせを試しました...これが得られるものです:
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS');
サーバー: 戻り値: "BancoOne" (適切な値)
OCI アプリ:戻り値 OCI_NO_DATA
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND trunc(DATE_PROC) = TO_DATE('20080705', 'YYYYMMDD');
サーバー内: 戻り値: "BancoOne"
OCI アプリ内: 戻り値 "BancoOne"
要点は、両方が同じ DB サーバーにアクセスしている場合、OCI アプリが異なる結果を出すのはなぜですか?
また、OCI アプリの目的を明確にするために、ユーザーが構成するクエリがあります。アイデアは、ユーザーが必要に応じてクエリを調整して、宛先 DB に存在する日付フィールドに適合させることです。そのため、日付形式がわからないため、「alter session set nls_date_format」ステートメントをコードに含めるべきではありません。このようにして、ユーザーに柔軟性を提供し、特定の日付形式に依存しないようにします。これは理にかなっていますか?助言がありますか?