Conversão BLOB Oracle para BINARY no SQLServer

294 views
Skip to first unread message

Advaldo de Paiva Moreira

unread,
Jan 21, 2014, 2:03:05 PM1/21/14
to sqlse...@googlegroups.com
Srs,
boa tarde.

Estou fazendo uma conversão de dados e migração de algumas tabelas do Oracle 11 para SQLServer 2008R2.
Um campo contém o conteudo de determinados arquivos que podem ser PDF, txt, image e esta no ORACLE como BLOB. 
Na ponta do SQL estou tentando migrar somente as imagens. Para isso criei uma tabela com o campo IMAGE,  mas não consigo nem ler este campo direto do Oracle.
Crio o linked server, consigo fazer o select diretamente pelo linked e por OPENQUERY, conforme exemplo abaixo, mas nao encontrei um conversor equivalente ao BLOB.

Agluém tem alguma sugestão?

Obrigado a todos!!

SQL:
SELECT * FROM OPENQUERY(ORADEVE04
, 'select  COMPANYID ,
-- TO_NCLOB(134FILE) , -- ESTE CAMPO CONTEM O CONTEUDO DE UM ARQUIVO
FILENAME
from OWNER.TABLE
where TYPE  = ''image/x-png''
')


Jose Luciano Leston

unread,
Jan 21, 2014, 2:22:38 PM1/21/14
to sqlse...@googlegroups.com

Meu caro,

 

Primeiro mude o campo da sua tabela SQL para VARBINARY(MAX). Depois, use o SSIS para fazer essa importação do ORACLE, usando OLEDB e não faça a conversão do campo BLOB na query de importação.

 

Abraços,

Luciano

--
 
---
You received this message because you are subscribed to the Google Groups "SQLServerDF" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sqlserverdf...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Advaldo de Paiva Moreira

unread,
Jan 21, 2014, 2:47:24 PM1/21/14
to sqlse...@googlegroups.com
Luciano, 
enquanto estava redidingo o email o SSIS estava em teste para verificar se seria possivel fazer por ele, mas não é.
O erro que aparece:
TITLE: SQL Server Import and Export Wizard
------------------------------

The statement could not be parsed.

------------------------------
ADDITIONAL INFORMATION:

Ocorreu um erro no Oracle, mas a mensagem de erro não pôde ser recuperada pelo Oracle.
Não há suporte para o tipo de dados. (Microsoft OLE DB Provider for Oracle)

------------------------------
BUTTONS:

OK
------------------------------


Vou acabar "baixando" manualmente estes arquivos e fazendo um BULK para inserção.

Obrigado!!

Jose Luciano Leston

unread,
Jan 21, 2014, 3:46:03 PM1/21/14
to sqlse...@googlegroups.com

Advaldo,

 

Pelo que entendi você utilizou o “Import and Export Wizard”, certo? Tente usar um pacote SSIS através do BIDS, criando um Data Flow com OLEDB Source e OLEDB Destination. Talvez seja necessário usar um Data Conversion do tipo DT_IMAGE entre eles.

Eu fiz uma importação a um tempo atrás entre o Oracle 8i e o SQL 2005  e funcionou (eram arquivos PDF)

Advaldo de Paiva Moreira

unread,
Jan 30, 2014, 1:44:06 PM1/30/14
to sqlse...@googlegroups.com
Luciano, fiz desta forma:

Mesmo colocando em VARBINARY(MAX) o erro de conversão persistia.

Resolvi fazendo um programa em c# que lê o conteúdo do campo, grava em arquivo fisico e depois eu importo ele via t-sql, como no exemplo abaixo:


declare @teste table  
	(id int identity(1,1)
		, arquivo varchar(max)
		, conteudo varbinary(max))

insert into @teste (arquivo, conteudo)
SELECT 'First test file', 
		BulkColumn FROM OPENROWSET(
			Bulk 'C:\temp\imagem.jpg', SINGLE_BLOB) AS BLOB

SELECT * FROM @teste 

Deste modo, fico independente do Oracle, do uso do CONVERT ou CAST.

Obrigado!!

Advaldo

Reply all
Reply to author
Forward
0 new messages