質問

OG4ODBCデータベースリンクを使用した複数のOracle 11.2.0.2データベースがSQL Server 2008データベースにリンクされています。 SQL Serverデータベースの特定のテーブルには、2つのVarchar(36)列があります。次のステートメントは1292行を返します。

select "id", "folder_id" from dbo.mediasite_presentation@ms;

最初の列の特定の値をクエリすると、行が返されます。

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52';
id                                   folder_id
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 54aa9b6e-1c55-4de5-a06f-033d8b19fff0

ただし、2番目の列の特定の値をクエリすると、行はありません。

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "folder_id"='54aa9b6e-1c55-4de5-a06f-033d8b19fff0';
no rows selected

WHERE句を使用して、TO_CHARで各フィールドをラッピングすると、次の興味深い結果が返されます。

select to_char("id"), to_char("folder_id") from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52';
TO_CHAR("ID")                        TO_CHAR("FOLDER_ID")
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 ┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐

興味深いことに、Rownum句を追加するだけで同じ結果を作成できます。

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52' and rownum<=1;

id                                   folder_id
------------------------------------ ------------------
006d815d-6e9e-4004-9104-51213a1ecd52 ┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐

見知らぬ人でさえ、データを返さないクエリの具体化されたビューを作成することは、実際にデータを返しているという事実です。

Create Materialized View TempMV as (
   select "id", "folder_id" from dbo.mediasite_presentation@ms 
      where "folder_id"='54aa9b6e-1c55-4de5-a06f-033d8b19fff0' and rownum<=1);
Materialized view created.
select * from TempMV;

id                                   folder_id
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 54aa9b6e-1c55-4de5-a06f-033d8b19fff0

このパズルの一部しか説明できない場合でも、答えてください。

役に立ちましたか?

解決

キャラクターセットの変換の問題のいくつかが疑わしいです。 TO_CHARを行うと、「┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐」(18文字)に戻ります。これは、列に含まれるデータがシングルバイトかマルチバイトであるかについて、ある程度の混乱があることを示唆しています。

「SQL Serverの一意のIdentifierデータ型は、16バイトのバイナリ値としてネイティブに保存されています」これは、理想的にはVarchar2またはcharではなく生データ型としてOracleに出くわすはずです。

あなたがするならば

CREATE VIEW temp_view as select  "id", "folder_id" from dbo.mediasite_presentation@ms

DESC TEMP_VIEWを実行すると表示されます

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top