Lei*_*fel 5 sql-server-2008 oracle sql-server query oracle-11g-r2
我们有多个 Oracle 11.2.0.2 数据库,其中 og4odbc 数据库链接到 SQL Server 2008 数据库。SQL Server 数据库中的特定表有两个 Varchar(36) 列。以下语句返回 1292 行:
select "id", "folder_id" from dbo.mediasite_presentation@ms;
Run Code Online (Sandbox Code Playgroud)
查询第一列中的特定值会返回一行:
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
Run Code Online (Sandbox Code Playgroud)
但是查询第二列中的特定值不返回任何行:
select "id", "folder_id" from dbo.mediasite_presentation@ms
where "folder_id"='54aa9b6e-1c55-4de5-a06f-033d8b19fff0';
no rows selected
Run Code Online (Sandbox Code Playgroud)
使用有效的 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 ??????????????????
Run Code Online (Sandbox Code Playgroud)
有趣的是,我只需添加一个 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 ??????????????????
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,为不返回数据的查询创建物化视图实际上返回了数据。
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
Run Code Online (Sandbox Code Playgroud)
即使您只能解释这个难题的一部分,也请回答。
我怀疑一些字符集转换问题。\n当您执行 TO_CHAR 时,您将返回“\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2 \x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94 \x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90\xe2\x94\x90"(18 个字符)。这表明对于列中包含的数据是单字节还是多字节存在一些混淆。
\n\n“SQL Server 中的 uniqueidentifier 数据类型本身存储为 16 字节二进制值”\n理想情况下,Oracle 应该将其视为 RAW 数据类型,而不是 VARCHAR2 或 CHAR。
\n\n如果你做一个
\n\nCREATE VIEW temp_view as select "id", "folder_id" from dbo.mediasite_presentation@ms\n
Run Code Online (Sandbox Code Playgroud)\n\n当您执行 DESC temp_view 时会显示什么
\n