Domanda

Abbiamo più database Oracle 11.2.0.2 con collegamenti a database og4odbc a un database di SQL Server 2008. Un particolare tabella nel database di SQL Server dispone di due (36) Varchar colonne. I seguenti restituisce dichiarazione 1292 righe:

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

Interrogazione per un valore specifico nella prima colonna restituisce una riga:

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

Ma query per un valore specifico nella seconda colonna non restituisce alcuna riga:

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

Uso della clausola where che funziona e avvolgendo ogni campo in una to_char restituisce i seguenti risultati interessanti:

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 ┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐

È interessante notare che in grado di produrre gli stessi risultati solo con l'aggiunta di una clausola 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 ┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐

Anche straniero è il fatto che la creazione di una vista materializzata per query che restituisce nessun dato restituisce effettivamente i dati.

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

Si prega di rispondere anche se si può spiegare solo un pezzo di questo puzzle.

È stato utile?

Soluzione

mi piacerebbe sospetto un po 'per di problema di conversione di caratteri. Quando si esegue un TO_CHAR, si stanno ottenendo indietro "++++++++++++++++++" (18 caratteri). Ciò suggerisce che v'è una certa confusione riguardo se i dati contenuti nella colonna a byte singolo o multi-byte.

"Il tipo di dati uniqueidentifier in SQL Server viene memorizzato in modo nativo come un valore binario a 16 byte" Questo dovrebbe idealmente venire attraverso di Oracle come un tipo di dati RAW non un VARCHAR2 o CHAR.

Se fate una

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

quello che si presenta quando si fa un DESC temp_view

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top