1

OracleCommandとOracleDataAdapterを使用して、Oracle用の小さなクエリツールを作成しました。ユーザーは完全なクエリ(パラメーターなし)を入力して実行するだけで、結果がdatagridviewに表示されます。これまでのところ、無効なクエリを試しましたが、たとえば次のようになります。

SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'

このクエリは、OracleのSQLでは無効です。日付リテラルと比較するには、to_date()関数を使用する必要があります。SQL開発者もそれを拒否しますが、どういうわけか私のクエリツールはうまく機能します。これは、私のOracleCommandがここでは少しウィザードであるという意味ですか、それとも何か間違ったことをしているのでしょうか。また、ツールの目的はクエリをテストすることであるため、この動作を省略する方法もあります。クエリは常に機能するはずです...

ありがとう

4

1 に答える 1

4

クエリはOracleに対して有効である可能性があります。to_date()セッションの日付形式で日付文字列を指定する場合は、使用する必要はありませんが、このような問題を回避するために、とにかくそうすることをお勧めします。

NLS_DATE_FORMATツールの環境がSQLDeveloperの環境と異なっているか、セッションの日付形式がOracleCommandによって暗黙的に設定されているようです。

select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'SQL *PlusとSQLDeveloper、およびツールからそれが何であるかを確認できます。そしてfromnls_database_parametersは、データベースのデフォルトをオーバーライドしているものを確認します。

DD-MON-RRツールにある可能性があり、他の場所で他の形式を期待しているように見えますが、これらのテーブルをチェックしないと、データベースのデフォルトを使用している場所と、セッションレベルでオーバーライドしている場所を判断するのは困難です。それがDBのデフォルトであり、他の環境ではオーバーライドがあると思います。

SQL Developerからalter session set nls_date_format='DD-MON-RR';、無効なクエリを試してから再実行してください。そこでも機能するはずです。

于 2010-09-10T13:54:59.340 に答える