質問者
ORACLEとのDBLINK時のSELECT結果が正しく取得できない

質問
-
ORACLE側の画像ファイルが登録されているデータテーブルから、SQLSERVERでDBLINKでデータを取得している処理があります。
※ORACLE側のテーブル構成は、社員番号(VARCHAR2)と画像データ(BLOB )
※ORACLEのバージョンは11.2.0.4です。
SQLSERVER 2008 R2 から、SELECTでデータを取得した場合は正しい値が取得できております。
SQLSERVER 2017 から SELECTでデータを取得したところ、異なる値が取得されております。
(社員番号を指定してSELECTしているにも関わらず、違う社員番号の画像データが取得できております。)
SELECT文自体は、下記のようにシンプルな内容になります。
SELECT
SYAINCD,
FILEDATA
FROM [DBLINK]..[USER].[TABLE]
WHRE SYAINCD = '9999'
上記事象の原因お分かりになる方いらっしゃいましたらご教示願います。
すべての返信
-
SQLSERVERでDBLINKでデータを取得している処理があります。
SQL Server の「リンクサーバー (Linked Servers)」の話なのか、
Oracle の「データベースリンク」(Database Link)」の話なのか、
状況を読み切れていないまま、思い付きで書いてしまいますが…。接続先情報が誤っているパターンと、何らかの理由でパラメーターの受け渡しが失敗して別の値として処理されているパターンが思い当たりました。
Oracle サーバー側でトレースログを確認してみるというのは如何でしょうか。
-
ご確認およびご質問いただき、ありがとうございます。
>現象として、該当のクエリを実行した場合、SYAINCDに '9999' 以外のデータが結果セットとして戻されているのでしょうか?
⇒SYAINCDには '9999' がセットされますが、FILEDATAに「SQLSERVER 2008 R2」と「SQLSERVER 2017」で異なる値がセットされております。
>問題の切り分けとして、OPENQUERY 経由で実行した場合、結果は変わりますでしょうか?
⇒ご教示頂いた内容試してみたいと思うのですが、実施まで少々時間がかかる見込みです。
確認でき次第、改めてご連絡させていただきますので、よろしくお願いいたします。