1

最近、SQL DB を SQL2005 32 ビットから 64 ビットに移動しました。OraOLEDB.Oracle Provider を使用して Oracle に接続する際に問題が発生しています。

Oracle 10G Client 、ODAC 64 ビットをインストールできました。リンク サーバーを Oracle インスタンスに追加することもできました。リンク サーバー名を直接使用してクエリを実行できます。

SELECT top 10 *
  FROM [DB0PBB0]..[DB0PBB0].[DM_CLICK] 

これまでのところ問題はありませんが、OPENQUERY を使用しようとすると問題が発生します。私は次のことを試しました:

select * from 
OPENQUERY(DB0PBB0,'select *  from DB0PBB0.DM_CLICK where Date_stamp <''24-Jul-09'' and Date_stamp >= ''23-Jul-09'' ')

SET FMTONLY OFF
select * from 
OPENQUERY(DB0PBB0,'select * from DB0PBB0.DM_CLICK where Date_stamp <''24-Jul-09'' and Date_stamp >= ''23-Jul-09'' ')

そして、列名のみを取得し、行は取得しません:(

このスクリプトを実行すると:

SET FMTONLY OFF
select * from 
OPENQUERY(DB0PBB0,'select ''hello'' from dual ')

私は得る

こんにちは

私の質問は、SQL05 64bit から Oracle に対して OPENQUERY を実行しようとした人はいますか? データの代わりに列だけが返されるのはなぜですか? 同じリンクを使用して別のサーバーで同じクエリを試したところ、機能し、行が返されました。

4

1 に答える 1

1

行を取得してSELECT * FROM DUALいるため、クエリの問題である可能性があります。クエリに関して、潜在的な落とし穴の 1 つは、日付列のように見えるもの ( DATE_STAMP) を VARCHAR と比較していることです。

日付を比較するために暗黙的な変換に頼るべきではありません。代わりに、適切な明示的な関数を使用する必要があります。たとえば、次のようになります。

select * from 
OPENQUERY(DB0PBB0,'select *  
                     from DB0PBB0.DM_CLICK 
                    where Date_stamp < to_date(''24-Jul-09'', ''dd-mon-rr'') 
                      and Date_stamp >= to_date(''23-Jul-09'', ''dd-mon-rr'')')
于 2009-08-25T15:58:31.667 に答える